{
  "$ref": "#/definitions/TopLevelSpec",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "Aggregate": {
      "anyOf": [
        {
          "$ref": "#/definitions/NonArgAggregateOp"
        },
        {
          "$ref": "#/definitions/ArgmaxDef"
        },
        {
          "$ref": "#/definitions/ArgminDef"
        }
      ]
    },
    "AggregateOp": {
      "enum": [
        "argmax",
        "argmin",
        "average",
        "count",
        "distinct",
        "max",
        "mean",
        "median",
        "min",
        "missing",
        "product",
        "q1",
        "q3",
        "ci0",
        "ci1",
        "stderr",
        "stdev",
        "stdevp",
        "sum",
        "valid",
        "values",
        "variance",
        "variancep",
        "exponential",
        "exponentialb"
      ],
      "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\"`). See the [full list of supported aggregation operations](https://vega.github.io/vega-lite/docs/aggregate.html#ops) for more information."
        }
      },
      "required": [
        "op",
        "as"
      ],
      "type": "object"
    },
    "Align": {
      "enum": [
        "left",
        "center",
        "right"
      ],
      "type": "string"
    },
    "AllSortString": {
      "anyOf": [
        {
          "$ref": "#/definitions/SortOrder"
        },
        {
          "$ref": "#/definitions/SortByChannel"
        },
        {
          "$ref": "#/definitions/SortByChannelDesc"
        }
      ]
    },
    "AnyMark": {
      "anyOf": [
        {
          "$ref": "#/definitions/CompositeMark"
        },
        {
          "$ref": "#/definitions/CompositeMarkDef"
        },
        {
          "$ref": "#/definitions/Mark"
        },
        {
          "$ref": "#/definitions/MarkDef"
        }
      ]
    },
    "AnyMarkConfig": {
      "anyOf": [
        {
          "$ref": "#/definitions/MarkConfig"
        },
        {
          "$ref": "#/definitions/AreaConfig"
        },
        {
          "$ref": "#/definitions/BarConfig"
        },
        {
          "$ref": "#/definitions/RectConfig"
        },
        {
          "$ref": "#/definitions/LineConfig"
        },
        {
          "$ref": "#/definitions/TickConfig"
        }
      ]
    },
    "AreaConfig": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align"
            },
            {
              "$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."
        },
        "angle": {
          "anyOf": [
            {
              "description": "The rotation angle of the text, in degrees.",
              "maximum": 360,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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 element, removing the mark item from the ARIA accessibility tree.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRole": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRoleDescription": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "aspect": {
          "anyOf": [
            {
              "description": "Whether to keep aspect ratio of image marks.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "baseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline"
            },
            {
              "$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": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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:__\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": [
            {
              "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cursor": {
          "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/ExprRef"
            }
          ]
        },
        "description": {
          "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/ExprRef"
            }
          ]
        },
        "dir": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dx": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dy": {
          "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.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ellipsis": {
          "anyOf": [
            {
              "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "endAngle": {
          "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/ExprRef"
            }
          ]
        },
        "fill": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "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": {
          "anyOf": [
            {
              "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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": {
          "anyOf": [
            {
              "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontSize": {
          "anyOf": [
            {
              "description": "The font size, in pixels.\n\n__Default value:__ `11`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style (e.g., `\"italic\"`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontWeight": {
          "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "height": {
          "anyOf": [
            {
              "description": "Height of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "href": {
          "anyOf": [
            {
              "$ref": "#/definitions/URI",
              "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "innerRadius": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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:\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"
            }
          ]
        },
        "invalid": {
          "anyOf": [
            {
              "$ref": "#/definitions/MarkInvalidDataMode"
            },
            {
              "type": "null"
            }
          ],
          "description": "Invalid data mode, which defines how the marks and corresponding scales should represent invalid values (`null` and `NaN` in continuous scales *without* defined output for invalid values).\n\n- `\"filter\"` — *Exclude* all invalid values from the visualization's *marks* and *scales*. For path marks (for line, area, trail), this option will create paths that connect valid points, as if the data rows with invalid values do not exist.\n\n- `\"break-paths-filter-domains\"` — Break path marks (for line, area, trail) at invalid values.  For non-path marks, this is equivalent to `\"filter\"`. All *scale* domains will *exclude* these filtered data points.\n\n- `\"break-paths-show-domains\"` — Break paths (for line, area, trail) at invalid values.  Hide invalid values for non-path marks. All *scale* domains will *include* these filtered data points (for both path and non-path marks).\n\n- `\"show\"` or `null` — Show all data points in the marks and scale domains. Each scale will use the output for invalid values defined in `config.scale.invalid` or, if unspecified, by default invalid values will produce the same visual values as zero (if the scale includes zero) or the minimum value (if the scale does not include zero).\n\n- `\"break-paths-show-path-domains\"` (default) — This is equivalent to `\"break-paths-show-domains\"` for path-based marks (line/area/trail) and `\"filter\"` for non-path marks.\n\n__Note__: If any channel's scale has an output for invalid values defined in `config.scale.invalid`, all values for the scales will be considered \"valid\" since they can produce a reasonable output for the scales. Thus, fields for such channels will not be filtered and will not cause path breaks."
        },
        "limit": {
          "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",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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`."
        },
        "lineBreak": {
          "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.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineHeight": {
          "anyOf": [
            {
              "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "opacity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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.\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": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "padAngle": {
          "anyOf": [
            {
              "description": "The angular padding applied to sides of the arc, in radians.",
              "type": "number"
            },
            {
              "$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/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.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
          "minimum": 0
        },
        "radius2": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "shape": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/definitions/SymbolShape"
                },
                {
                  "type": "string"
                }
              ],
              "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/ExprRef"
            }
          ]
        },
        "theta": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "time": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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"
        },
        "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": [
            {
              "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.\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": [
            {
              "$ref": "#/definitions/URI",
              "description": "The URL of the image file for image marks."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "width": {
          "anyOf": [
            {
              "description": "Width of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "x": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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"
    },
    "ArgmaxDef": {
      "additionalProperties": false,
      "properties": {
        "argmax": {
          "$ref": "#/definitions/FieldName"
        }
      },
      "required": [
        "argmax"
      ],
      "type": "object"
    },
    "ArgminDef": {
      "additionalProperties": false,
      "properties": {
        "argmin": {
          "$ref": "#/definitions/FieldName"
        }
      },
      "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\"`, `\"fit-x\"`, `\"fit-y\"`,  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",
        "none",
        "fit",
        "fit-x",
        "fit-y"
      ],
      "type": "string"
    },
    "Axis": {
      "additionalProperties": false,
      "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 axis from the ARIA accessibility tree.\n\n__Default value:__ `true`",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "description": {
          "anyOf": [
            {
              "description": "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.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
        },
        "domainCap": {
          "anyOf": [
            {
              "$ref": "#/definitions/StrokeCap",
              "description": "The stroke cap for the domain line's ending style. One of `\"butt\"`, `\"round\"` or `\"square\"`.\n\n__Default value:__ `\"butt\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "domainColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Color of axis domain line.\n\n__Default value:__ `\"gray\"`."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "domainDash": {
          "anyOf": [
            {
              "description": "An array of alternating [stroke, space] lengths for dashed domain lines.",
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "domainDashOffset": {
          "anyOf": [
            {
              "description": "The pixel offset at which to start drawing with the domain dash array.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "domainOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the axis domain line.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "domainWidth": {
          "anyOf": [
            {
              "description": "Stroke width of axis domain line\n\n__Default value:__ `1`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "format": {
          "$ref": "#/definitions/Format",
          "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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"
        },
        "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"
        },
        "gridCap": {
          "anyOf": [
            {
              "$ref": "#/definitions/StrokeCap",
              "description": "The stroke cap for grid lines' ending style. One of `\"butt\"`, `\"round\"` or `\"square\"`.\n\n__Default value:__ `\"butt\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "gridColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Color of gridlines.\n\n__Default value:__ `\"lightGray\"`."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisColor"
            }
          ]
        },
        "gridDash": {
          "anyOf": [
            {
              "description": "An array of alternating [stroke, space] lengths for dashed grid lines.",
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumberArray"
            }
          ]
        },
        "gridDashOffset": {
          "anyOf": [
            {
              "description": "The pixel offset at which to start drawing with the grid dash array.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "gridOpacity": {
          "anyOf": [
            {
              "description": "The stroke opacity of grid (value between [0,1])\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "gridWidth": {
          "anyOf": [
            {
              "description": "The grid width, in pixels.\n\n__Default value:__ `1`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "labelAlign": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align",
              "description": "Horizontal text alignment of axis tick labels, overriding the default setting for the current axis orientation."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisLabelAlign"
            }
          ]
        },
        "labelAngle": {
          "anyOf": [
            {
              "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelBaseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline",
              "description": "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."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisLabelBaseline"
            }
          ]
        },
        "labelBound": {
          "anyOf": [
            {
              "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"
              ]
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "The color of the tick label, can be in hex color code or regular color name."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisColor"
            }
          ]
        },
        "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 axis's backing `datum` object.",
          "type": "string"
        },
        "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": {
          "anyOf": [
            {
              "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelFont": {
          "anyOf": [
            {
              "description": "The font of the tick label.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisString"
            }
          ]
        },
        "labelFontSize": {
          "anyOf": [
            {
              "description": "The font size of the label, in pixels.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "labelFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "Font style of the title."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisLabelFontStyle"
            }
          ]
        },
        "labelFontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight",
              "description": "Font weight of axis tick labels."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisLabelFontWeight"
            }
          ]
        },
        "labelLimit": {
          "anyOf": [
            {
              "description": "Maximum allowed pixel width of axis tick labels.\n\n__Default value:__ `180`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelLineHeight": {
          "anyOf": [
            {
              "description": "Line height in pixels for multi-line label text or label text with `\"line-top\"` or `\"line-bottom\"` baseline.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelOffset": {
          "anyOf": [
            {
              "description": "Position offset in pixels to apply to labels, in addition to tickOffset.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "labelOpacity": {
          "anyOf": [
            {
              "description": "The opacity of the labels.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "labelOverlap": {
          "anyOf": [
            {
              "$ref": "#/definitions/LabelOverlap"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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": {
          "anyOf": [
            {
              "description": "The padding in pixels between labels and ticks.\n\n__Default value:__ `2`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "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"
            }
          ]
        },
        "labels": {
          "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.",
          "type": "boolean"
        },
        "maxExtent": {
          "anyOf": [
            {
              "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "minExtent": {
          "anyOf": [
            {
              "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "offset": {
          "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": [
            {
              "$ref": "#/definitions/AxisOrient"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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`"
        },
        "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 axis. A style is a named collection of axis property 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:__ (none) __Note:__ Any specified style will augment the default 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": [
            {
              "description": "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",
              "enum": [
                "center",
                "extent"
              ],
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "tickCap": {
          "anyOf": [
            {
              "$ref": "#/definitions/StrokeCap",
              "description": "The stroke cap for the tick lines' ending style. One of `\"butt\"`, `\"round\"` or `\"square\"`.\n\n__Default value:__ `\"butt\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "tickColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "The color of the axis's tick.\n\n__Default value:__ `\"gray\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisColor"
            }
          ]
        },
        "tickCount": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/TimeInterval"
            },
            {
              "$ref": "#/definitions/TimeIntervalStep"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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.\n\nFor scales of type `\"time\"` or `\"utc\"`, the tick count can instead be a time interval specifier. Legal string values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}` includes a desired number of interval steps. Here, ticks are generated for each quarter (Jan, Apr, Jul, Oct) boundary.\n\n__Default value__: Determine using a formula `ceil(width/40)` for x and `ceil(height/40)` for y.",
          "minimum": 0
        },
        "tickDash": {
          "anyOf": [
            {
              "description": "An array of alternating [stroke, space] lengths for dashed tick mark lines.",
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumberArray"
            }
          ]
        },
        "tickDashOffset": {
          "anyOf": [
            {
              "description": "The pixel offset at which to start drawing with the tick mark dash array.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "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": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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."
        },
        "tickOffset": {
          "anyOf": [
            {
              "description": "Position offset in pixels to apply to ticks, labels, and gridlines.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "tickOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the ticks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "tickRound": {
          "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`",
          "type": "boolean"
        },
        "tickSize": {
          "anyOf": [
            {
              "description": "The size in pixels of axis ticks.\n\n__Default value:__ `5`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "tickWidth": {
          "anyOf": [
            {
              "description": "The width, in pixels, of ticks.\n\n__Default value:__ `1`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "ticks": {
          "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`",
          "type": "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."
        },
        "titleAlign": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align",
              "description": "Horizontal text alignment of axis titles."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleAnchor": {
          "anyOf": [
            {
              "$ref": "#/definitions/TitleAnchor",
              "description": "Text anchor position for placing axis titles."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleAngle": {
          "anyOf": [
            {
              "description": "Angle in degrees of axis titles.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleBaseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline",
              "description": "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."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Color of the title, can be in hex color code or regular color name."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFont": {
          "anyOf": [
            {
              "description": "Font of the title. (e.g., `\"Helvetica Neue\"`).",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFontSize": {
          "anyOf": [
            {
              "description": "Font size of the title.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "Font style of the title."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight",
              "description": "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleLimit": {
          "anyOf": [
            {
              "description": "Maximum allowed pixel width of axis titles.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleLineHeight": {
          "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"
            }
          ]
        },
        "titleOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the axis title.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titlePadding": {
          "anyOf": [
            {
              "description": "The padding, in pixels, between title and axis.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleX": {
          "anyOf": [
            {
              "description": "X-coordinate of the axis title relative to the axis group.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleY": {
          "anyOf": [
            {
              "description": "Y-coordinate of the axis title relative to the axis group.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "translate": {
          "anyOf": [
            {
              "description": "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).\n\n__Default value:__ `0.5`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "values": {
          "anyOf": [
            {
              "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 axis tick values."
        },
        "zindex": {
          "description": "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, set `zindex` to `1` or more.\n\n__Default value:__ `0` (behind the marks).",
          "minimum": 0,
          "type": "number"
        }
      },
      "type": "object"
    },
    "AxisConfig": {
      "additionalProperties": false,
      "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 axis from the ARIA accessibility tree.\n\n__Default value:__ `true`",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "description": {
          "anyOf": [
            {
              "description": "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.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "disable": {
          "description": "Disable axis by default.",
          "type": "boolean"
        },
        "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"
        },
        "domainCap": {
          "anyOf": [
            {
              "$ref": "#/definitions/StrokeCap",
              "description": "The stroke cap for the domain line's ending style. One of `\"butt\"`, `\"round\"` or `\"square\"`.\n\n__Default value:__ `\"butt\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "domainColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Color of axis domain line.\n\n__Default value:__ `\"gray\"`."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "domainDash": {
          "anyOf": [
            {
              "description": "An array of alternating [stroke, space] lengths for dashed domain lines.",
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "domainDashOffset": {
          "anyOf": [
            {
              "description": "The pixel offset at which to start drawing with the domain dash array.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "domainOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the axis domain line.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "domainWidth": {
          "anyOf": [
            {
              "description": "Stroke width of axis domain line\n\n__Default value:__ `1`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "format": {
          "$ref": "#/definitions/Format",
          "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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"
        },
        "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"
        },
        "gridCap": {
          "anyOf": [
            {
              "$ref": "#/definitions/StrokeCap",
              "description": "The stroke cap for grid lines' ending style. One of `\"butt\"`, `\"round\"` or `\"square\"`.\n\n__Default value:__ `\"butt\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "gridColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Color of gridlines.\n\n__Default value:__ `\"lightGray\"`."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisColor"
            }
          ]
        },
        "gridDash": {
          "anyOf": [
            {
              "description": "An array of alternating [stroke, space] lengths for dashed grid lines.",
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumberArray"
            }
          ]
        },
        "gridDashOffset": {
          "anyOf": [
            {
              "description": "The pixel offset at which to start drawing with the grid dash array.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "gridOpacity": {
          "anyOf": [
            {
              "description": "The stroke opacity of grid (value between [0,1])\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "gridWidth": {
          "anyOf": [
            {
              "description": "The grid width, in pixels.\n\n__Default value:__ `1`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "labelAlign": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align",
              "description": "Horizontal text alignment of axis tick labels, overriding the default setting for the current axis orientation."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisLabelAlign"
            }
          ]
        },
        "labelAngle": {
          "anyOf": [
            {
              "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelBaseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline",
              "description": "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."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisLabelBaseline"
            }
          ]
        },
        "labelBound": {
          "anyOf": [
            {
              "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"
              ]
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "The color of the tick label, can be in hex color code or regular color name."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisColor"
            }
          ]
        },
        "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 axis's backing `datum` object.",
          "type": "string"
        },
        "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": {
          "anyOf": [
            {
              "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelFont": {
          "anyOf": [
            {
              "description": "The font of the tick label.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisString"
            }
          ]
        },
        "labelFontSize": {
          "anyOf": [
            {
              "description": "The font size of the label, in pixels.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "labelFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "Font style of the title."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisLabelFontStyle"
            }
          ]
        },
        "labelFontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight",
              "description": "Font weight of axis tick labels."
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisLabelFontWeight"
            }
          ]
        },
        "labelLimit": {
          "anyOf": [
            {
              "description": "Maximum allowed pixel width of axis tick labels.\n\n__Default value:__ `180`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelLineHeight": {
          "anyOf": [
            {
              "description": "Line height in pixels for multi-line label text or label text with `\"line-top\"` or `\"line-bottom\"` baseline.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelOffset": {
          "anyOf": [
            {
              "description": "Position offset in pixels to apply to labels, in addition to tickOffset.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "labelOpacity": {
          "anyOf": [
            {
              "description": "The opacity of the labels.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "labelOverlap": {
          "anyOf": [
            {
              "$ref": "#/definitions/LabelOverlap"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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": {
          "anyOf": [
            {
              "description": "The padding in pixels between labels and ticks.\n\n__Default value:__ `2`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "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"
            }
          ]
        },
        "labels": {
          "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.",
          "type": "boolean"
        },
        "maxExtent": {
          "anyOf": [
            {
              "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "minExtent": {
          "anyOf": [
            {
              "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "offset": {
          "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": [
            {
              "$ref": "#/definitions/AxisOrient"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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`"
        },
        "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 axis. A style is a named collection of axis property 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:__ (none) __Note:__ Any specified style will augment the default 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": [
            {
              "description": "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",
              "enum": [
                "center",
                "extent"
              ],
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "tickCap": {
          "anyOf": [
            {
              "$ref": "#/definitions/StrokeCap",
              "description": "The stroke cap for the tick lines' ending style. One of `\"butt\"`, `\"round\"` or `\"square\"`.\n\n__Default value:__ `\"butt\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "tickColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "The color of the axis's tick.\n\n__Default value:__ `\"gray\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisColor"
            }
          ]
        },
        "tickCount": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/TimeInterval"
            },
            {
              "$ref": "#/definitions/TimeIntervalStep"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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.\n\nFor scales of type `\"time\"` or `\"utc\"`, the tick count can instead be a time interval specifier. Legal string values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}` includes a desired number of interval steps. Here, ticks are generated for each quarter (Jan, Apr, Jul, Oct) boundary.\n\n__Default value__: Determine using a formula `ceil(width/40)` for x and `ceil(height/40)` for y.",
          "minimum": 0
        },
        "tickDash": {
          "anyOf": [
            {
              "description": "An array of alternating [stroke, space] lengths for dashed tick mark lines.",
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumberArray"
            }
          ]
        },
        "tickDashOffset": {
          "anyOf": [
            {
              "description": "The pixel offset at which to start drawing with the tick mark dash array.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "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": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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."
        },
        "tickOffset": {
          "anyOf": [
            {
              "description": "Position offset in pixels to apply to ticks, labels, and gridlines.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "tickOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the ticks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "tickRound": {
          "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`",
          "type": "boolean"
        },
        "tickSize": {
          "anyOf": [
            {
              "description": "The size in pixels of axis ticks.\n\n__Default value:__ `5`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "tickWidth": {
          "anyOf": [
            {
              "description": "The width, in pixels, of ticks.\n\n__Default value:__ `1`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/ConditionalAxisNumber"
            }
          ]
        },
        "ticks": {
          "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`",
          "type": "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."
        },
        "titleAlign": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align",
              "description": "Horizontal text alignment of axis titles."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleAnchor": {
          "anyOf": [
            {
              "$ref": "#/definitions/TitleAnchor",
              "description": "Text anchor position for placing axis titles."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleAngle": {
          "anyOf": [
            {
              "description": "Angle in degrees of axis titles.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleBaseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline",
              "description": "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."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Color of the title, can be in hex color code or regular color name."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFont": {
          "anyOf": [
            {
              "description": "Font of the title. (e.g., `\"Helvetica Neue\"`).",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFontSize": {
          "anyOf": [
            {
              "description": "Font size of the title.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "Font style of the title."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight",
              "description": "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleLimit": {
          "anyOf": [
            {
              "description": "Maximum allowed pixel width of axis titles.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleLineHeight": {
          "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"
            }
          ]
        },
        "titleOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the axis title.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titlePadding": {
          "anyOf": [
            {
              "description": "The padding, in pixels, between title and axis.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleX": {
          "anyOf": [
            {
              "description": "X-coordinate of the axis title relative to the axis group.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleY": {
          "anyOf": [
            {
              "description": "Y-coordinate of the axis title relative to the axis group.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "translate": {
          "anyOf": [
            {
              "description": "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).\n\n__Default value:__ `0.5`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "values": {
          "anyOf": [
            {
              "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 axis tick values."
        },
        "zindex": {
          "description": "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, set `zindex` to `1` or more.\n\n__Default value:__ `0` (behind the marks).",
          "minimum": 0,
          "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"
    },
    "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": {
        "align": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align"
            },
            {
              "$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."
        },
        "angle": {
          "anyOf": [
            {
              "description": "The rotation angle of the text, in degrees.",
              "maximum": 360,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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 element, removing the mark item from the ARIA accessibility tree.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRole": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRoleDescription": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "aspect": {
          "anyOf": [
            {
              "description": "Whether to keep aspect ratio of image marks.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "baseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline"
            },
            {
              "$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."
        },
        "binSpacing": {
          "description": "Offset between bars for binned field. The 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"
        },
        "blend": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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:__\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`",
          "minimum": 0,
          "type": "number"
        },
        "cornerRadius": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusEnd": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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": [
            {
              "description": "The radius in pixels of rounded rectangles' top right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cursor": {
          "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/ExprRef"
            }
          ]
        },
        "description": {
          "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/ExprRef"
            }
          ]
        },
        "dir": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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
        },
        "dx": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dy": {
          "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.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ellipsis": {
          "anyOf": [
            {
              "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "endAngle": {
          "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/ExprRef"
            }
          ]
        },
        "fill": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "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": {
          "anyOf": [
            {
              "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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": {
          "anyOf": [
            {
              "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontSize": {
          "anyOf": [
            {
              "description": "The font size, in pixels.\n\n__Default value:__ `11`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style (e.g., `\"italic\"`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontWeight": {
          "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "height": {
          "anyOf": [
            {
              "description": "Height of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "href": {
          "anyOf": [
            {
              "$ref": "#/definitions/URI",
              "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "innerRadius": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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:\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"
            }
          ]
        },
        "invalid": {
          "anyOf": [
            {
              "$ref": "#/definitions/MarkInvalidDataMode"
            },
            {
              "type": "null"
            }
          ],
          "description": "Invalid data mode, which defines how the marks and corresponding scales should represent invalid values (`null` and `NaN` in continuous scales *without* defined output for invalid values).\n\n- `\"filter\"` — *Exclude* all invalid values from the visualization's *marks* and *scales*. For path marks (for line, area, trail), this option will create paths that connect valid points, as if the data rows with invalid values do not exist.\n\n- `\"break-paths-filter-domains\"` — Break path marks (for line, area, trail) at invalid values.  For non-path marks, this is equivalent to `\"filter\"`. All *scale* domains will *exclude* these filtered data points.\n\n- `\"break-paths-show-domains\"` — Break paths (for line, area, trail) at invalid values.  Hide invalid values for non-path marks. All *scale* domains will *include* these filtered data points (for both path and non-path marks).\n\n- `\"show\"` or `null` — Show all data points in the marks and scale domains. Each scale will use the output for invalid values defined in `config.scale.invalid` or, if unspecified, by default invalid values will produce the same visual values as zero (if the scale includes zero) or the minimum value (if the scale does not include zero).\n\n- `\"break-paths-show-path-domains\"` (default) — This is equivalent to `\"break-paths-show-domains\"` for path-based marks (line/area/trail) and `\"filter\"` for non-path marks.\n\n__Note__: If any channel's scale has an output for invalid values defined in `config.scale.invalid`, all values for the scales will be considered \"valid\" since they can produce a reasonable output for the scales. Thus, fields for such channels will not be filtered and will not cause path breaks."
        },
        "limit": {
          "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",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineBreak": {
          "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.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineHeight": {
          "anyOf": [
            {
              "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "minBandSize": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The minimum band size for bar and rectangle marks. __Default value:__ `0.25`"
        },
        "opacity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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.\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": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "padAngle": {
          "anyOf": [
            {
              "description": "The angular padding applied to sides of the arc, in radians.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "radius": {
          "anyOf": [
            {
              "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.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
          "minimum": 0
        },
        "radius2": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "shape": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/definitions/SymbolShape"
                },
                {
                  "type": "string"
                }
              ],
              "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/ExprRef"
            }
          ]
        },
        "theta": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "time": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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"
        },
        "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": [
            {
              "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.\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": [
            {
              "$ref": "#/definitions/URI",
              "description": "The URL of the image file for image marks."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "width": {
          "anyOf": [
            {
              "description": "Width of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "x": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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"
    },
    "BaseTitleNoValueRefs": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "$ref": "#/definitions/Align",
          "description": "Horizontal text alignment for title text. One of `\"left\"`, `\"center\"`, or `\"right\"`."
        },
        "anchor": {
          "anyOf": [
            {
              "$ref": "#/definitions/TitleAnchor",
              "description": "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."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "angle": {
          "anyOf": [
            {
              "description": "Angle in degrees of title and subtitle text.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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 title from the ARIA accessibility tree.\n\n__Default value:__ `true`",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "baseline": {
          "$ref": "#/definitions/TextBaseline",
          "description": "Vertical text baseline for title and subtitle text. 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."
        },
        "color": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Text color for title text."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dx": {
          "anyOf": [
            {
              "description": "Delta offset for title and subtitle text x-coordinate.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dy": {
          "anyOf": [
            {
              "description": "Delta offset for title and subtitle text y-coordinate.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "font": {
          "anyOf": [
            {
              "description": "Font name for title text.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontSize": {
          "anyOf": [
            {
              "description": "Font size in pixels for title text.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "Font style for title text."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight",
              "description": "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "frame": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/definitions/TitleFrame"
                },
                {
                  "type": "string"
                }
              ],
              "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)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "limit": {
          "anyOf": [
            {
              "description": "The maximum allowed length in pixels of title and subtitle text.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineHeight": {
          "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"
            }
          ]
        },
        "offset": {
          "anyOf": [
            {
              "description": "The orthogonal offset in pixels by which to displace the title group from its position along the edge of the chart.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "orient": {
          "anyOf": [
            {
              "$ref": "#/definitions/TitleOrient",
              "description": "Default title orientation (`\"top\"`, `\"bottom\"`, `\"left\"`, or `\"right\"`)"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitleColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Text color for subtitle text."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitleFont": {
          "anyOf": [
            {
              "description": "Font name for subtitle text.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitleFontSize": {
          "anyOf": [
            {
              "description": "Font size in pixels for subtitle text.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitleFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "Font style for subtitle text."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitleFontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight",
              "description": "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitleLineHeight": {
          "anyOf": [
            {
              "description": "Line height in pixels for multi-line subtitle text.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitlePadding": {
          "anyOf": [
            {
              "description": "The padding in pixels between title and subtitle text.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "zindex": {
          "anyOf": [
            {
              "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        }
      },
      "type": "object"
    },
    "Baseline": {
      "enum": [
        "top",
        "middle",
        "bottom"
      ],
      "type": "string"
    },
    "BinExtent": {
      "anyOf": [
        {
          "items": {
            "type": "number"
          },
          "maxItems": 2,
          "minItems": 2,
          "type": "array"
        },
        {
          "$ref": "#/definitions/ParameterExtent"
        }
      ]
    },
    "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"
          },
          "maxItems": 2,
          "minItems": 1,
          "type": "array"
        },
        "extent": {
          "$ref": "#/definitions/BinExtent",
          "description": "A two-element (`[min, max]`) array indicating the range of desired bin values."
        },
        "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, attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten.\n\n__Default value:__ `true`",
          "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. This can be either a string or an array of strings with two elements denoting the name for the fields for bin start and bin end respectively. If a single string (e.g., `\"val\"`) is provided, the end field will be `\"val_end\"`."
        },
        "bin": {
          "anyOf": [
            {
              "const": 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": {
          "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": {
          "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"
        },
        "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": [
        "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",
          "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": [
            "radio",
            "select"
          ],
          "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": {
          "description": "An array of options to select from.",
          "items": {},
          "type": "array"
        }
      },
      "required": [
        "input",
        "options"
      ],
      "type": "object"
    },
    "BindRange": {
      "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",
          "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"
        }
      },
      "required": [
        "input"
      ],
      "type": "object"
    },
    "Binding": {
      "anyOf": [
        {
          "$ref": "#/definitions/BindCheckbox"
        },
        {
          "$ref": "#/definitions/BindRadioSelect"
        },
        {
          "$ref": "#/definitions/BindRange"
        },
        {
          "$ref": "#/definitions/BindInput"
        },
        {
          "$ref": "#/definitions/BindDirect"
        }
      ]
    },
    "BinnedTimeUnit": {
      "enum": [
        "binnedyear",
        "binnedyearquarter",
        "binnedyearquartermonth",
        "binnedyearmonth",
        "binnedyearmonthdate",
        "binnedyearmonthdatehours",
        "binnedyearmonthdatehoursminutes",
        "binnedyearmonthdatehoursminutesseconds",
        "binnedyearweek",
        "binnedyearweekday",
        "binnedyearweekdayhours",
        "binnedyearweekdayhoursminutes",
        "binnedyearweekdayhoursminutesseconds",
        "binnedyeardayofyear",
        "binnedutcyear",
        "binnedutcyearquarter",
        "binnedutcyearquartermonth",
        "binnedutcyearmonth",
        "binnedutcyearmonthdate",
        "binnedutcyearmonthdatehours",
        "binnedutcyearmonthdatehoursminutes",
        "binnedutcyearmonthdatehoursminutesseconds",
        "binnedutcyearweek",
        "binnedutcyearweekday",
        "binnedutcyearweekdayhours",
        "binnedutcyearweekdayhoursminutes",
        "binnedutcyearweekdayhoursminutesseconds",
        "binnedutcyeardayofyear"
      ],
      "type": "string"
    },
    "Blend": {
      "enum": [
        null,
        "multiply",
        "screen",
        "overlay",
        "darken",
        "lighten",
        "color-dodge",
        "color-burn",
        "hard-light",
        "soft-light",
        "difference",
        "exclusion",
        "hue",
        "saturation",
        "color",
        "luminosity"
      ],
      "type": [
        "null",
        "string"
      ]
    },
    "BoxPlot": {
      "const": "boxplot",
      "type": "string"
    },
    "BoxPlotConfig": {
      "additionalProperties": false,
      "properties": {
        "box": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/AnyMarkConfig"
            }
          ]
        },
        "extent": {
          "anyOf": [
            {
              "const": "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/AnyMarkConfig"
            }
          ]
        },
        "outliers": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/AnyMarkConfig"
            }
          ]
        },
        "rule": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/AnyMarkConfig"
            }
          ]
        },
        "size": {
          "description": "Size of the box and median tick of a box plot",
          "type": "number"
        },
        "ticks": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/AnyMarkConfig"
            }
          ]
        }
      },
      "type": "object"
    },
    "BoxPlotDef": {
      "additionalProperties": false,
      "properties": {
        "box": {
          "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"
            }
          ],
          "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": [
            {
              "const": "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`."
        },
        "invalid": {
          "anyOf": [
            {
              "$ref": "#/definitions/MarkInvalidDataMode"
            },
            {
              "type": "null"
            }
          ],
          "description": "Invalid data mode, which defines how the marks and corresponding scales should represent invalid values (`null` and `NaN` in continuous scales *without* defined output for invalid values).\n\n- `\"filter\"` — *Exclude* all invalid values from the visualization's *marks* and *scales*. For path marks (for line, area, trail), this option will create paths that connect valid points, as if the data rows with invalid values do not exist.\n\n- `\"break-paths-filter-domains\"` — Break path marks (for line, area, trail) at invalid values.  For non-path marks, this is equivalent to `\"filter\"`. All *scale* domains will *exclude* these filtered data points.\n\n- `\"break-paths-show-domains\"` — Break paths (for line, area, trail) at invalid values.  Hide invalid values for non-path marks. All *scale* domains will *include* these filtered data points (for both path and non-path marks).\n\n- `\"show\"` or `null` — Show all data points in the marks and scale domains. Each scale will use the output for invalid values defined in `config.scale.invalid` or, if unspecified, by default invalid values will produce the same visual values as zero (if the scale includes zero) or the minimum value (if the scale does not include zero).\n\n- `\"break-paths-show-path-domains\"` (default) — This is equivalent to `\"break-paths-show-domains\"` for path-based marks (line/area/trail) and `\"filter\"` for non-path marks.\n\n__Note__: If any channel's scale has an output for invalid values defined in `config.scale.invalid`, all values for the scales will be considered \"valid\" since they can produce a reasonable output for the scales. Thus, fields for such channels will not be filtered and will not cause path breaks."
        },
        "median": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/AnyMarkConfig"
            }
          ]
        },
        "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 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/AnyMarkConfig"
            }
          ]
        },
        "rule": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/AnyMarkConfig"
            }
          ]
        },
        "size": {
          "description": "Size of the box and median tick of a box plot",
          "type": "number"
        },
        "ticks": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/AnyMarkConfig"
            }
          ]
        },
        "type": {
          "$ref": "#/definitions/BoxPlot",
          "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"
    },
    "BrushConfig": {
      "additionalProperties": false,
      "properties": {
        "cursor": {
          "$ref": "#/definitions/Cursor",
          "description": "The mouse cursor used over the interval mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
        },
        "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, for 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"
    },
    "Categorical": {
      "enum": [
        "accent",
        "category10",
        "category20",
        "category20b",
        "category20c",
        "dark2",
        "paired",
        "pastel1",
        "pastel2",
        "set1",
        "set2",
        "set3",
        "tableau10",
        "tableau20",
        "observable10"
      ],
      "type": "string"
    },
    "Color": {
      "anyOf": [
        {
          "$ref": "#/definitions/ColorName"
        },
        {
          "$ref": "#/definitions/HexColor"
        },
        {
          "type": "string"
        }
      ]
    },
    "ColorDef": {
      "$ref": "#/definitions/MarkPropDef<(Gradient|string|null)>"
    },
    "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"
    },
    "ColorScheme": {
      "anyOf": [
        {
          "$ref": "#/definitions/Categorical"
        },
        {
          "$ref": "#/definitions/SequentialSingleHue"
        },
        {
          "$ref": "#/definitions/SequentialMultiHue"
        },
        {
          "$ref": "#/definitions/Diverging"
        },
        {
          "$ref": "#/definitions/Cyclical"
        }
      ]
    },
    "Encoding": {
      "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)."
        },
        "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."
        },
        "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"
            },
            {
              "$ref": "#/definitions/OrderOnlyDef"
            }
          ],
          "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",
          "description": "The outer radius in pixels of arc marks."
        },
        "radius2": {
          "$ref": "#/definitions/Position2Def",
          "description": "The inner radius in pixels of arc marks."
        },
        "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."
        },
        "time": {
          "$ref": "#/definitions/TimeDef"
        },
        "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\"`."
        },
        "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."
        },
        "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\"`."
        },
        "yOffset": {
          "$ref": "#/definitions/OffsetDef",
          "description": "Offset of y-position of the marks"
        }
      },
      "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 `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"
    },
    "ConditionalMarkPropFieldOrDatumDef": {
      "anyOf": [
        {
          "$ref": "#/definitions/ConditionalPredicate<MarkPropFieldOrDatumDef>"
        },
        {
          "$ref": "#/definitions/ConditionalParameter<MarkPropFieldOrDatumDef>"
        }
      ]
    },
    "ConditionalMarkPropFieldOrDatumDef<TypeForShape>": {
      "anyOf": [
        {
          "$ref": "#/definitions/ConditionalPredicate<MarkPropFieldOrDatumDef<TypeForShape>>"
        },
        {
          "$ref": "#/definitions/ConditionalParameter<MarkPropFieldOrDatumDef<TypeForShape>>"
        }
      ]
    },
    "ConditionalStringFieldDef": {
      "anyOf": [
        {
          "$ref": "#/definitions/ConditionalPredicate<StringFieldDef>"
        },
        {
          "$ref": "#/definitions/ConditionalParameter<StringFieldDef>"
        }
      ]
    },
    "ConditionalValueDef<(Gradient|string|null|ExprRef)>": {
      "anyOf": [
        {
          "$ref": "#/definitions/ConditionalPredicate<ValueDef<(Gradient|string|null|ExprRef)>>"
        },
        {
          "$ref": "#/definitions/ConditionalParameter<ValueDef<(Gradient|string|null|ExprRef)>>"
        }
      ]
    },
    "ConditionalValueDef<(Text|ExprRef)>": {
      "anyOf": [
        {
          "$ref": "#/definitions/ConditionalPredicate<ValueDef<(Text|ExprRef)>>"
        },
        {
          "$ref": "#/definitions/ConditionalParameter<ValueDef<(Text|ExprRef)>>"
        }
      ]
    },
    "ConditionalValueDef<(number[]|ExprRef)>": {
      "anyOf": [
        {
          "$ref": "#/definitions/ConditionalPredicate<ValueDef<(number[]|ExprRef)>>"
        },
        {
          "$ref": "#/definitions/ConditionalParameter<ValueDef<(number[]|ExprRef)>>"
        }
      ]
    },
    "ConditionalValueDef<(number|ExprRef)>": {
      "anyOf": [
        {
          "$ref": "#/definitions/ConditionalPredicate<ValueDef<(number|ExprRef)>>"
        },
        {
          "$ref": "#/definitions/ConditionalParameter<ValueDef<(number|ExprRef)>>"
        }
      ]
    },
    "ConditionalValueDef<(string|ExprRef)>": {
      "anyOf": [
        {
          "$ref": "#/definitions/ConditionalPredicate<ValueDef<(string|ExprRef)>>"
        },
        {
          "$ref": "#/definitions/ConditionalParameter<ValueDef<(string|ExprRef)>>"
        }
      ]
    },
    "ConditionalValueDef<(string|null|ExprRef)>": {
      "anyOf": [
        {
          "$ref": "#/definitions/ConditionalPredicate<ValueDef<(string|null|ExprRef)>>"
        },
        {
          "$ref": "#/definitions/ConditionalParameter<ValueDef<(string|null|ExprRef)>>"
        }
      ]
    },
    "ConditionalValueDef<number>": {
      "anyOf": [
        {
          "$ref": "#/definitions/ConditionalPredicate<ValueDef<number>>"
        },
        {
          "$ref": "#/definitions/ConditionalParameter<ValueDef<number>>"
        }
      ]
    },
    "ConditionalAxisColor": {
      "$ref": "#/definitions/ConditionalAxisProperty<(Color|null)>"
    },
    "ConditionalAxisLabelAlign": {
      "$ref": "#/definitions/ConditionalAxisProperty<(Align|null)>"
    },
    "ConditionalAxisLabelBaseline": {
      "$ref": "#/definitions/ConditionalAxisProperty<(TextBaseline|null)>"
    },
    "ConditionalAxisLabelFontStyle": {
      "$ref": "#/definitions/ConditionalAxisProperty<(FontStyle|null)>"
    },
    "ConditionalAxisLabelFontWeight": {
      "$ref": "#/definitions/ConditionalAxisProperty<(FontWeight|null)>"
    },
    "ConditionalAxisNumber": {
      "$ref": "#/definitions/ConditionalAxisProperty<(number|null)>"
    },
    "ConditionalAxisNumberArray": {
      "$ref": "#/definitions/ConditionalAxisProperty<(number[]|null)>"
    },
    "ConditionalAxisProperty<(Align|null)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(Align|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(Align|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "value": {
              "anyOf": [
                {
                  "$ref": "#/definitions/Align"
                },
                {
                  "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": [
            "condition",
            "value"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(Align|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(Align|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "expr": {
              "description": "Vega expression (which can refer to Vega-Lite parameters).",
              "type": "string"
            }
          },
          "required": [
            "condition",
            "expr"
          ],
          "type": "object"
        }
      ]
    },
    "ConditionalAxisProperty<(Color|null)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(Color|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(Color|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "value": {
              "anyOf": [
                {
                  "$ref": "#/definitions/Color"
                },
                {
                  "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": [
            "condition",
            "value"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(Color|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(Color|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "expr": {
              "description": "Vega expression (which can refer to Vega-Lite parameters).",
              "type": "string"
            }
          },
          "required": [
            "condition",
            "expr"
          ],
          "type": "object"
        }
      ]
    },
    "ConditionalAxisProperty<(FontStyle|null)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(FontStyle|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(FontStyle|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "value": {
              "anyOf": [
                {
                  "$ref": "#/definitions/FontStyle"
                },
                {
                  "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": [
            "condition",
            "value"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(FontStyle|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(FontStyle|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "expr": {
              "description": "Vega expression (which can refer to Vega-Lite parameters).",
              "type": "string"
            }
          },
          "required": [
            "condition",
            "expr"
          ],
          "type": "object"
        }
      ]
    },
    "ConditionalAxisProperty<(FontWeight|null)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(FontWeight|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(FontWeight|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "value": {
              "anyOf": [
                {
                  "$ref": "#/definitions/FontWeight"
                },
                {
                  "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": [
            "condition",
            "value"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(FontWeight|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(FontWeight|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "expr": {
              "description": "Vega expression (which can refer to Vega-Lite parameters).",
              "type": "string"
            }
          },
          "required": [
            "condition",
            "expr"
          ],
          "type": "object"
        }
      ]
    },
    "ConditionalAxisProperty<(TextBaseline|null)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(TextBaseline|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(TextBaseline|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "value": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TextBaseline"
                },
                {
                  "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": [
            "condition",
            "value"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(TextBaseline|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(TextBaseline|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "expr": {
              "description": "Vega expression (which can refer to Vega-Lite parameters).",
              "type": "string"
            }
          },
          "required": [
            "condition",
            "expr"
          ],
          "type": "object"
        }
      ]
    },
    "ConditionalAxisProperty<(number[]|null)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(number[]|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(number[]|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "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": [
            "condition",
            "value"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(number[]|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(number[]|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "expr": {
              "description": "Vega expression (which can refer to Vega-Lite parameters).",
              "type": "string"
            }
          },
          "required": [
            "condition",
            "expr"
          ],
          "type": "object"
        }
      ]
    },
    "ConditionalAxisProperty<(number|null)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(number|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(number|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "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": [
            "condition",
            "value"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(number|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(number|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "expr": {
              "description": "Vega expression (which can refer to Vega-Lite parameters).",
              "type": "string"
            }
          },
          "required": [
            "condition",
            "expr"
          ],
          "type": "object"
        }
      ]
    },
    "ConditionalAxisProperty<(string|null)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(string|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(string|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "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": [
            "condition",
            "value"
          ],
          "type": "object"
        },
        {
          "additionalProperties": false,
          "properties": {
            "condition": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(string|null)>|ExprRef)>"
                },
                {
                  "items": {
                    "$ref": "#/definitions/ConditionalPredicate<(ValueDef<(string|null)>|ExprRef)>"
                  },
                  "type": "array"
                }
              ]
            },
            "expr": {
              "description": "Vega expression (which can refer to Vega-Lite parameters).",
              "type": "string"
            }
          },
          "required": [
            "condition",
            "expr"
          ],
          "type": "object"
        }
      ]
    },
    "ConditionalAxisString": {
      "$ref": "#/definitions/ConditionalAxisProperty<(string|null)>"
    },
    "ConditionalParameter<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."
            },
            "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."
            },
            "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",
              "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."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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."
            }
          },
          "required": [
            "param"
          ],
          "type": "object"
        },
        {
          "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."
            },
            "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/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."
            },
            "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": [
            "param"
          ],
          "type": "object"
        }
      ]
    },
    "ConditionalParameter<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."
            },
            "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."
            },
            "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",
              "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."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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/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": [
            "param"
          ],
          "type": "object"
        },
        {
          "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."
            },
            "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/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."
            },
            "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": [
            "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."
        },
        "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#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",
          "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": {
          "$ref": "#/definitions/Format",
          "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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"
        },
        "param": {
          "$ref": "#/definitions/ParameterName",
          "description": "Filter using a parameter name."
        },
        "timeUnit": {
          "anyOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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."
        }
      },
      "required": [
        "param"
      ],
      "type": "object"
    },
    "ConditionalParameter<ValueDef<(Gradient|string|null|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "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": [
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "type": "string"
            },
            {
              "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": [
        "param",
        "value"
      ],
      "type": "object"
    },
    "ConditionalParameter<ValueDef<(Text|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "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": [
            {
              "$ref": "#/definitions/Text"
            },
            {
              "$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": [
        "param",
        "value"
      ],
      "type": "object"
    },
    "ConditionalParameter<ValueDef<(number[]|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "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": [
            {
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$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": [
        "param",
        "value"
      ],
      "type": "object"
    },
    "ConditionalParameter<ValueDef<(number|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "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": [
            {
              "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": [
        "param",
        "value"
      ],
      "type": "object"
    },
    "ConditionalParameter<ValueDef<(string|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "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": [
            {
              "type": "string"
            },
            {
              "$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": [
        "param",
        "value"
      ],
      "type": "object"
    },
    "ConditionalParameter<ValueDef<(string|null|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "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": [
            {
              "type": "string"
            },
            {
              "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": [
        "param",
        "value"
      ],
      "type": "object"
    },
    "ConditionalParameter<ValueDef<number>>": {
      "additionalProperties": false,
      "properties": {
        "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).",
          "type": "number"
        }
      },
      "required": [
        "param",
        "value"
      ],
      "type": "object"
    },
    "ConditionalPredicate<(ValueDef<(Align|null)>|ExprRef)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "test": {
              "$ref": "#/definitions/PredicateComposition",
              "description": "Predicate for triggering the condition"
            },
            "value": {
              "anyOf": [
                {
                  "$ref": "#/definitions/Align"
                },
                {
                  "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<(Color|null)>|ExprRef)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "test": {
              "$ref": "#/definitions/PredicateComposition",
              "description": "Predicate for triggering the condition"
            },
            "value": {
              "anyOf": [
                {
                  "$ref": "#/definitions/Color"
                },
                {
                  "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<(FontStyle|null)>|ExprRef)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "test": {
              "$ref": "#/definitions/PredicateComposition",
              "description": "Predicate for triggering the condition"
            },
            "value": {
              "anyOf": [
                {
                  "$ref": "#/definitions/FontStyle"
                },
                {
                  "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<(FontWeight|null)>|ExprRef)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "test": {
              "$ref": "#/definitions/PredicateComposition",
              "description": "Predicate for triggering the condition"
            },
            "value": {
              "anyOf": [
                {
                  "$ref": "#/definitions/FontWeight"
                },
                {
                  "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<(TextBaseline|null)>|ExprRef)>": {
      "anyOf": [
        {
          "additionalProperties": false,
          "properties": {
            "test": {
              "$ref": "#/definitions/PredicateComposition",
              "description": "Predicate for triggering the condition"
            },
            "value": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TextBaseline"
                },
                {
                  "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": {
              "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>": {
      "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."
            },
            "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`."
            },
            "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."
            },
            "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."
            },
            "test": {
              "$ref": "#/definitions/PredicateComposition",
              "description": "Predicate for triggering the condition"
            },
            "timeUnit": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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."
            }
          },
          "required": [
            "test"
          ],
          "type": "object"
        },
        {
          "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."
            },
            "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"
            },
            "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"
          ],
          "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."
            },
            "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`."
            },
            "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."
            },
            "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."
            },
            "test": {
              "$ref": "#/definitions/PredicateComposition",
              "description": "Predicate for triggering the condition"
            },
            "timeUnit": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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/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"
          ],
          "type": "object"
        },
        {
          "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."
            },
            "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"
            },
            "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"
          ],
          "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."
        },
        "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#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`."
        },
        "format": {
          "$ref": "#/definitions/Format",
          "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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"
        },
        "test": {
          "$ref": "#/definitions/PredicateComposition",
          "description": "Predicate for triggering the condition"
        },
        "timeUnit": {
          "anyOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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."
        }
      },
      "required": [
        "test"
      ],
      "type": "object"
    },
    "ConditionalPredicate<ValueDef<(Gradient|string|null|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "test": {
          "$ref": "#/definitions/PredicateComposition",
          "description": "Predicate for triggering the condition"
        },
        "value": {
          "anyOf": [
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "type": "string"
            },
            {
              "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": [
        "test",
        "value"
      ],
      "type": "object"
    },
    "ConditionalPredicate<ValueDef<(Text|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "test": {
          "$ref": "#/definitions/PredicateComposition",
          "description": "Predicate for triggering the condition"
        },
        "value": {
          "anyOf": [
            {
              "$ref": "#/definitions/Text"
            },
            {
              "$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": [
        "test",
        "value"
      ],
      "type": "object"
    },
    "ConditionalPredicate<ValueDef<(number[]|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "test": {
          "$ref": "#/definitions/PredicateComposition",
          "description": "Predicate for triggering the condition"
        },
        "value": {
          "anyOf": [
            {
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$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": [
        "test",
        "value"
      ],
      "type": "object"
    },
    "ConditionalPredicate<ValueDef<(number|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "test": {
          "$ref": "#/definitions/PredicateComposition",
          "description": "Predicate for triggering the condition"
        },
        "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": [
        "test",
        "value"
      ],
      "type": "object"
    },
    "ConditionalPredicate<ValueDef<(string|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "test": {
          "$ref": "#/definitions/PredicateComposition",
          "description": "Predicate for triggering the condition"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$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": [
        "test",
        "value"
      ],
      "type": "object"
    },
    "ConditionalPredicate<ValueDef<(string|null|ExprRef)>>": {
      "additionalProperties": false,
      "properties": {
        "test": {
          "$ref": "#/definitions/PredicateComposition",
          "description": "Predicate for triggering the condition"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "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": [
        "test",
        "value"
      ],
      "type": "object"
    },
    "ConditionalPredicate<ValueDef<number>>": {
      "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"
        }
      },
      "required": [
        "test",
        "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:\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)."
        },
        "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."
        },
        "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."
        },
        "mark": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Mark Config"
        },
        "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"
        },
        "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"
        },
        "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"
        },
        "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"
        },
        "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 or selections that parameterize a visualization.",
          "items": {
            "$ref": "#/definitions/TopLevelParameter"
          },
          "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"
        },
        "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)."
        },
        "tooltipFormat": {
          "$ref": "#/definitions/FormatConfig",
          "description": "Define [custom format configuration](https://vega.github.io/vega-lite/docs/config.html#format) for tooltips. If unspecified, default format config will be applied."
        },
        "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": {
        "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."
        },
        "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"
    },
    "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"
          },
          "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"
          },
          "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"
        },
        "resolve": {
          "description": "Indicates how parameters for multiple densities should be resolved. If `\"independent\"`, each density may have its own domain extent and dynamic number of curve sample steps. If `\"shared\"`, the KDE transform will ensure that all densities are defined over a shared domain and curve steps, enabling stacking.\n\n__Default value:__ `\"shared\"`",
          "enum": [
            "independent",
            "shared"
          ],
          "type": "string"
        },
        "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": {
      "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": {
          "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.",
          "items": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              },
              {
                "type": "boolean"
              },
              {
                "$ref": "#/definitions/DateTime"
              }
            ]
          },
          "type": "array"
        }
      },
      "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` (do not sort)."
        }
      },
      "type": "object"
    },
    "ErrorBand": {
      "const": "errorband",
      "type": "string"
    },
    "ErrorBandConfig": {
      "additionalProperties": false,
      "properties": {
        "band": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/AnyMarkConfig"
            }
          ]
        },
        "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 95% bootstrapped 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/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"
            }
          ],
          "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": {
          "$ref": "#/definitions/ErrorBarExtent",
          "description": "The extent of the band. Available options include:\n- `\"ci\"`: Extend the band to the 95% bootstrapped 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.",
          "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"
        },
        "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:\n- `\"ci\"`: Extend the rule to the 95% bootstrapped 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/AnyMarkConfig"
            }
          ]
        },
        "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/AnyMarkConfig"
            }
          ]
        }
      },
      "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:__\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": {
          "$ref": "#/definitions/ErrorBarExtent",
          "description": "The extent of the rule. Available options include:\n- `\"ci\"`: Extend the rule to the 95% bootstrapped 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.",
          "maximum": 1,
          "minimum": 0,
          "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/AnyMarkConfig"
            }
          ]
        },
        "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/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"
          ],
          "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",
        "pointerdown",
        "pointermove",
        "pointerout",
        "pointerover",
        "pointerup",
        "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": [
        "expr"
      ],
      "type": "object"
    },
    "ExtentTransform": {
      "additionalProperties": false,
      "properties": {
        "extent": {
          "$ref": "#/definitions/FieldName",
          "description": "The field of which to get the extent."
        },
        "param": {
          "$ref": "#/definitions/ParameterName",
          "description": "The output parameter produced by the extent transform."
        }
      },
      "required": [
        "extent",
        "param"
      ],
      "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.\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.\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"
        },
        "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": {
          "anyOf": [
            {
              "$ref": "#/definitions/Header"
            },
            {
              "type": "null"
            }
          ],
          "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`."
        },
        "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/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "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."
        },
        "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`."
        },
        "header": {
          "anyOf": [
            {
              "$ref": "#/definitions/Header"
            },
            {
              "type": "null"
            }
          ],
          "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": {
          "anyOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "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": {
        "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"
            },
            {
              "$ref": "#/definitions/OrderOnlyDef"
            }
          ],
          "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",
          "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.\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."
        },
        "time": {
          "$ref": "#/definitions/TimeDef"
        },
        "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\"`."
        },
        "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."
        },
        "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\"`."
        },
        "yOffset": {
          "$ref": "#/definitions/OffsetDef",
          "description": "Offset of y-position of the marks"
        }
      },
      "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.\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`"
        },
        "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.\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": {
          "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.\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": [
        "mark"
      ],
      "type": "object"
    },
    "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. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
        },
        "geometry": {
          "$ref": "#/definitions/Geometry",
          "description": "The feature's geometry"
        },
        "id": {
          "description": "A value that uniquely identifies this feature in a https://tools.ietf.org/html/rfc7946#section-3.2.",
          "type": [
            "string",
            "number"
          ]
        },
        "properties": {
          "$ref": "#/definitions/GeoJsonProperties",
          "description": "Properties associated with this feature."
        },
        "type": {
          "const": "Feature",
          "description": "Specifies the type of GeoJSON object.",
          "type": "string"
        }
      },
      "required": [
        "geometry",
        "properties",
        "type"
      ],
      "type": "object"
    },
    "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. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
        },
        "geometry": {
          "$ref": "#/definitions/Geometry",
          "description": "The feature's geometry"
        },
        "id": {
          "description": "A value that uniquely identifies this feature in a https://tools.ietf.org/html/rfc7946#section-3.2.",
          "type": [
            "string",
            "number"
          ]
        },
        "properties": {
          "$ref": "#/definitions/GeoJsonProperties",
          "description": "Properties associated with this feature."
        },
        "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. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. 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/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/BinnedTimeUnit"
            },
            {
              "$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/BinnedTimeUnit"
            },
            {
              "$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/BinnedTimeUnit"
            },
            {
              "$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/BinnedTimeUnit"
            },
            {
              "$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"
            },
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/DateTime"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The value that the field should be less than."
        },
        "timeUnit": {
          "anyOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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"
            },
            {
              "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, for a data item included in the filtered data."
        },
        "timeUnit": {
          "anyOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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": {
        "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/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|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."
        },
        "datum": {
          "anyOf": [
            {
              "$ref": "#/definitions/PrimitiveValue"
            },
            {
              "$ref": "#/definitions/DateTime"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/RepeatRef"
            }
          ],
          "description": "A constant value in data domain."
        },
        "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"
    },
    "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/ConditionalValueDef<(string|null|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(string|null|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."
        },
        "datum": {
          "anyOf": [
            {
              "$ref": "#/definitions/PrimitiveValue"
            },
            {
              "$ref": "#/definitions/DateTime"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/RepeatRef"
            }
          ],
          "description": "A constant value in data domain."
        },
        "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"
    },
    "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"
        },
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(number|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."
        },
        "datum": {
          "anyOf": [
            {
              "$ref": "#/definitions/PrimitiveValue"
            },
            {
              "$ref": "#/definitions/DateTime"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/RepeatRef"
            }
          ],
          "description": "A constant value in data domain."
        },
        "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"
    },
    "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"
        },
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(number[]|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."
        },
        "datum": {
          "anyOf": [
            {
              "$ref": "#/definitions/PrimitiveValue"
            },
            {
              "$ref": "#/definitions/DateTime"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/RepeatRef"
            }
          ],
          "description": "A constant value in data domain."
        },
        "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"
    },
    "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": "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."
        },
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|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."
        },
        "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."
        },
        "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/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "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": "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."
        },
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(number|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."
        },
        "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."
        },
        "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/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "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": "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."
        },
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(number[]|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."
        },
        "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."
        },
        "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/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "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"
        },
        "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."
        },
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(string|null|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."
        },
        "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."
        },
        "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/BinnedTimeUnit"
            },
            {
              "$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/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"
    },
    "FieldOrDatumDefWithCondition<StringDatumDef,Text>": {
      "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/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."
        },
        "datum": {
          "anyOf": [
            {
              "$ref": "#/definitions/PrimitiveValue"
            },
            {
              "$ref": "#/definitions/DateTime"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$ref": "#/definitions/RepeatRef"
            }
          ],
          "description": "A constant value in data domain."
        },
        "format": {
          "$ref": "#/definitions/Format",
          "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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"
        },
        "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"
    },
    "FieldOrDatumDefWithCondition<StringFieldDef,Text>": {
      "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": "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."
        },
        "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."
        },
        "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": {
          "$ref": "#/definitions/Format",
          "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "FieldOrDatumDefWithCondition<StringFieldDef,string>": {
      "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": "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."
        },
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalValueDef<(string|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(string|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."
        },
        "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": {
          "$ref": "#/definitions/Format",
          "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "FieldRange": {
      "additionalProperties": false,
      "properties": {
        "field": {
          "type": "string"
        }
      },
      "required": [
        "field"
      ],
      "type": "object"
    },
    "FieldRangePredicate": {
      "additionalProperties": false,
      "properties": {
        "field": {
          "$ref": "#/definitions/FieldName",
          "description": "Field to be tested."
        },
        "range": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "$ref": "#/definitions/DateTime"
                  },
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/definitions/ExprRef"
                  }
                ]
              },
              "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": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$ref": "#/definitions/TimeUnitParams"
            }
          ],
          "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."
        },
        "timeUnit": {
          "anyOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$ref": "#/definitions/TimeUnitParams"
            }
          ],
          "description": "Time unit for the field to be tested."
        },
        "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/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": [
        "filter"
      ],
      "type": "object"
    },
    "Fit": {
      "anyOf": [
        {
          "$ref": "#/definitions/GeoJsonFeature"
        },
        {
          "$ref": "#/definitions/GeoJsonFeatureCollection"
        },
        {
          "items": {
            "$ref": "#/definitions/GeoJsonFeature"
          },
          "type": "array"
        }
      ]
    },
    "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. 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"
        }
      },
      "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. __Default value:__ `[\"key\", \"value\"]`",
          "items": {
            "$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"
      ]
    },
    "Format": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "$ref": "#/definitions/TimeFormatSpecifier"
        },
        {
          "$ref": "#/definitions/Dict"
        }
      ]
    },
    "FormatConfig": {
      "additionalProperties": false,
      "properties": {
        "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"
        },
        "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"
        },
        "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"
        },
        "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"
        },
        "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"
        }
      },
      "type": "object"
    },
    "Generator": {
      "anyOf": [
        {
          "$ref": "#/definitions/SequenceGenerator"
        },
        {
          "$ref": "#/definitions/SphereGenerator"
        },
        {
          "$ref": "#/definitions/GraticuleGenerator"
        }
      ]
    },
    "ConcatSpec<GenericSpec>": {
      "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. 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.\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"
        },
        "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. 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"
        }
      },
      "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. 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.\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"
        },
        "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: 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": [
            {
              "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/FacetedUnitSpec"
            }
          ],
          "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"
        }
      },
      "required": [
        "facet",
        "spec"
      ],
      "type": "object"
    },
    "HConcatSpec<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.\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": [
            {
              "$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": [
        "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"
            },
            {
              "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."
        },
        "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."
        },
        "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"
        },
        "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": [
            {
              "$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"
        },
        "vconcat": {
          "description": "A list of views to be concatenated and put into a column.",
          "items": {
            "$ref": "#/definitions/Spec"
          },
          "type": "array"
        }
      },
      "required": [
        "vconcat"
      ],
      "type": "object"
    },
    "GeoJsonFeature": {
      "$ref": "#/definitions/Feature"
    },
    "GeoJsonFeatureCollection": {
      "$ref": "#/definitions/FeatureCollection"
    },
    "GeoJsonProperties": {
      "anyOf": [
        {
          "type": "object"
        },
        {
          "type": "null"
        }
      ]
    },
    "Geometry": {
      "anyOf": [
        {
          "$ref": "#/definitions/Point"
        },
        {
          "$ref": "#/definitions/MultiPoint"
        },
        {
          "$ref": "#/definitions/LineString"
        },
        {
          "$ref": "#/definitions/MultiLineString"
        },
        {
          "$ref": "#/definitions/Polygon"
        },
        {
          "$ref": "#/definitions/MultiPolygon"
        },
        {
          "$ref": "#/definitions/GeometryCollection"
        }
      ],
      "description": "Geometry object. 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. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
        },
        "geometries": {
          "items": {
            "$ref": "#/definitions/Geometry"
          },
          "type": "array"
        },
        "type": {
          "const": "GeometryCollection",
          "description": "Specifies the type of GeoJSON object.",
          "type": "string"
        }
      },
      "required": [
        "geometries",
        "type"
      ],
      "type": "object"
    },
    "Gradient": {
      "anyOf": [
        {
          "$ref": "#/definitions/LinearGradient"
        },
        {
          "$ref": "#/definitions/RadialGradient"
        }
      ]
    },
    "GradientStop": {
      "additionalProperties": false,
      "properties": {
        "color": {
          "$ref": "#/definitions/Color",
          "description": "The color value at this point in the gradient."
        },
        "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": [
            {
              "const": 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": {
          "$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]`"
        },
        "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": {
          "$ref": "#/definitions/Format",
          "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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"
            },
            {
              "$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/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": [
            {
              "$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 header's backing `datum` object.",
          "type": "string"
        },
        "labelFont": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The font of the header label."
        },
        "labelFontSize": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The font size of the header label, in pixels.",
          "minimum": 0
        },
        "labelFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The font style of the header label."
        },
        "labelFontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The font weight of the header label."
        },
        "labelLimit": {
          "anyOf": [
            {
              "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"
        },
        "labelLineHeight": {
          "anyOf": [
            {
              "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."
        },
        "labelOrient": {
          "$ref": "#/definitions/Orient",
          "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
        },
        "labelPadding": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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": {
          "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."
        },
        "titleAlign": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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": {
          "anyOf": [
            {
              "$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\"`"
        },
        "titleColor": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Color of the header title, can be in hex color code or regular color name."
        },
        "titleFont": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`)."
        },
        "titleFontSize": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Font size of the header title.",
          "minimum": 0
        },
        "titleFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The font style of the header title."
        },
        "titleFontWeight": {
          "anyOf": [
            {
              "$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`)."
        },
        "titleLimit": {
          "anyOf": [
            {
              "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"
        },
        "titleLineHeight": {
          "anyOf": [
            {
              "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."
        },
        "titleOrient": {
          "$ref": "#/definitions/Orient",
          "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
        },
        "titlePadding": {
          "anyOf": [
            {
              "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"
    },
    "HeaderConfig": {
      "additionalProperties": false,
      "properties": {
        "format": {
          "$ref": "#/definitions/Format",
          "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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"
            },
            {
              "$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/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": [
            {
              "$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 header's backing `datum` object.",
          "type": "string"
        },
        "labelFont": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The font of the header label."
        },
        "labelFontSize": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The font size of the header label, in pixels.",
          "minimum": 0
        },
        "labelFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The font style of the header label."
        },
        "labelFontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The font weight of the header label."
        },
        "labelLimit": {
          "anyOf": [
            {
              "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"
        },
        "labelLineHeight": {
          "anyOf": [
            {
              "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."
        },
        "labelOrient": {
          "$ref": "#/definitions/Orient",
          "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
        },
        "labelPadding": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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"
        },
        "titleAlign": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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": {
          "anyOf": [
            {
              "$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\"`"
        },
        "titleColor": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Color of the header title, can be in hex color code or regular color name."
        },
        "titleFont": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`)."
        },
        "titleFontSize": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Font size of the header title.",
          "minimum": 0
        },
        "titleFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The font style of the header title."
        },
        "titleFontWeight": {
          "anyOf": [
            {
              "$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`)."
        },
        "titleLimit": {
          "anyOf": [
            {
              "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"
        },
        "titleLineHeight": {
          "anyOf": [
            {
              "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."
        },
        "titleOrient": {
          "$ref": "#/definitions/Orient",
          "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
        },
        "titlePadding": {
          "anyOf": [
            {
              "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"
        },
        "keyvals": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "$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": {
            "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."
        },
        "keyvals": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "$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\"`."
        }
      },
      "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"
        },
        {
          "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/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"
        },
        "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/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."
        },
        "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 `[pointerdown, window:pointerup] > window:pointermove!`. 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"
          ]
        },
        "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": [
            {
              "$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"
        },
        "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/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."
        },
        "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 `[pointerdown, window:pointerup] > window:pointermove!`. 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"
          ]
        },
        "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."
        },
        "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. 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"
        },
        "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": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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": {
          "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": [
            {
              "$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.\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"
        },
        "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": {
          "$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."
        },
        "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)"
        },
        "spec": {
          "anyOf": [
            {
              "$ref": "#/definitions/LayerSpec"
            },
            {
              "$ref": "#/definitions/UnitSpecWithFrame"
            }
          ],
          "description": "A specification of the view that gets repeated."
        },
        "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": [
        "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": [
            {
              "$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/SharedEncoding",
          "description": "A shared key-value mapping between encoding channels and definition of fields in the underlying layers."
        },
        "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."
        },
        "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": [
            {
              "$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.\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": "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"
            }
          ]
        },
        "clipHeight": {
          "anyOf": [
            {
              "description": "The height in pixels to clip symbol legend entries and limit their size.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "columnPadding": {
          "anyOf": [
            {
              "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "cornerRadius": {
          "anyOf": [
            {
              "description": "Corner radius for the full legend.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "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": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Background fill color for the full legend."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "format": {
          "$ref": "#/definitions/Format",
          "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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"
        },
        "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"
            }
          ]
        },
        "gradientOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the color gradient.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "gradientStrokeWidth": {
          "anyOf": [
            {
              "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "gridAlign": {
          "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/ExprRef"
            }
          ]
        },
        "labelAlign": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align",
              "description": "The alignment of the legend label, can be left, center, or right."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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/ExprRef"
            }
          ]
        },
        "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/ExprRef"
            }
          ]
        },
        "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 label.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelFontSize": {
          "anyOf": [
            {
              "description": "The font size of legend label.\n\n__Default value:__ `10`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style of legend label."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelFontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight",
              "description": "The font weight of legend label."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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.\n\n__Default value:__ `4`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelOpacity": {
          "anyOf": [
            {
              "description": "Opacity of labels.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "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"
            }
          ]
        },
        "strokeColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Border stroke color for the full legend."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolDash": {
          "anyOf": [
            {
              "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.",
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolDashOffset": {
          "anyOf": [
            {
              "description": "The pixel offset at which to start drawing with the symbol stroke dash array.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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": [
            {
              "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the legend symbols.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolSize": {
          "anyOf": [
            {
              "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolStrokeColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Stroke color for legend symbols."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolStrokeWidth": {
          "anyOf": [
            {
              "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "tickCount": {
          "anyOf": [
            {
              "$ref": "#/definitions/TickCount",
              "description": "The desired number of tick values for quantitative legends."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "tickMinStep": {
          "anyOf": [
            {
              "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`"
        },
        "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."
        },
        "titleAlign": {
          "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."
            },
            {
              "$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\"`."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "titleFont": {
          "anyOf": [
            {
              "description": "The font of the legend title.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFontSize": {
          "anyOf": [
            {
              "description": "The font size of the legend title.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style of the legend title."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "titleLimit": {
          "anyOf": [
            {
              "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleLineHeight": {
          "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"
            }
          ]
        },
        "titleOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the legend title.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleOrient": {
          "anyOf": [
            {
              "$ref": "#/definitions/Orient",
              "description": "Orientation of the legend title."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titlePadding": {
          "anyOf": [
            {
              "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.",
              "type": "number"
            },
            {
              "$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"
        },
        "values": {
          "anyOf": [
            {
              "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."
        },
        "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": "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"
            }
          ]
        },
        "clipHeight": {
          "anyOf": [
            {
              "description": "The height in pixels to clip symbol legend entries and limit their size.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "columnPadding": {
          "anyOf": [
            {
              "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "cornerRadius": {
          "anyOf": [
            {
              "description": "Corner radius for the full legend.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "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": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Background fill color for the full legend."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "gradientDirection": {
          "anyOf": [
            {
              "$ref": "#/definitions/Orientation",
              "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for gradient legends.\n\n__Default value:__ `\"vertical\"`."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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": {
          "anyOf": [
            {
              "description": "The maximum allowed length in pixels of color ramp gradient labels.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "gradientLabelOffset": {
          "anyOf": [
            {
              "description": "Vertical offset in pixels for color ramp gradient labels.\n\n__Default value:__ `2`.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "gradientOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the color gradient.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "gradientStrokeWidth": {
          "anyOf": [
            {
              "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "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": {
          "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/ExprRef"
            }
          ]
        },
        "labelAlign": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align",
              "description": "The alignment of the legend label, can be left, center, or right."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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/ExprRef"
            }
          ]
        },
        "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/ExprRef"
            }
          ]
        },
        "labelFont": {
          "anyOf": [
            {
              "description": "The font of the legend label.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelFontSize": {
          "anyOf": [
            {
              "description": "The font size of legend label.\n\n__Default value:__ `10`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style of legend label."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelFontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight",
              "description": "The font weight of legend label."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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.\n\n__Default value:__ `4`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelOpacity": {
          "anyOf": [
            {
              "description": "Opacity of labels.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "labelOverlap": {
          "anyOf": [
            {
              "$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`."
        },
        "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"
            }
          ]
        },
        "layout": {
          "$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"
            }
          ]
        },
        "strokeColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Border stroke color for the full legend."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "strokeDash": {
          "anyOf": [
            {
              "description": "Border stroke dash pattern for the full legend.",
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "strokeWidth": {
          "anyOf": [
            {
              "description": "Border stroke width for the full legend.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "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"
            }
          ]
        },
        "symbolDash": {
          "anyOf": [
            {
              "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.",
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolDashOffset": {
          "anyOf": [
            {
              "description": "The pixel offset at which to start drawing with the symbol stroke dash array.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolDirection": {
          "anyOf": [
            {
              "$ref": "#/definitions/Orientation",
              "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for symbol legends.\n\n__Default value:__ `\"vertical\"`."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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": [
            {
              "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the legend symbols.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolSize": {
          "anyOf": [
            {
              "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolStrokeColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Stroke color for legend symbols."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "symbolStrokeWidth": {
          "anyOf": [
            {
              "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "tickCount": {
          "anyOf": [
            {
              "$ref": "#/definitions/TickCount",
              "description": "The desired number of tick values for quantitative legends."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "title": {
          "description": "Set to null to disable title for the axis, legend, or header.",
          "type": "null"
        },
        "titleAlign": {
          "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."
            },
            {
              "$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\"`."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "titleFont": {
          "anyOf": [
            {
              "description": "The font of the legend title.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFontSize": {
          "anyOf": [
            {
              "description": "The font size of the legend title.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style of the legend title."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            }
          ]
        },
        "titleLimit": {
          "anyOf": [
            {
              "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleLineHeight": {
          "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"
            }
          ]
        },
        "titleOpacity": {
          "anyOf": [
            {
              "description": "Opacity of the legend title.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titleOrient": {
          "anyOf": [
            {
              "$ref": "#/definitions/Orient",
              "description": "Orientation of the legend title."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "titlePadding": {
          "anyOf": [
            {
              "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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"
            },
            {
              "$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"
        },
        "size": {
          "$ref": "#/definitions/ResolveMode"
        },
        "stroke": {
          "$ref": "#/definitions/ResolveMode"
        },
        "strokeDash": {
          "$ref": "#/definitions/ResolveMode"
        },
        "strokeOpacity": {
          "$ref": "#/definitions/ResolveMode"
        },
        "strokeWidth": {
          "$ref": "#/definitions/ResolveMode"
        },
        "time": {
          "$ref": "#/definitions/ResolveMode"
        }
      },
      "type": "object"
    },
    "LegendStreamBinding": {
      "additionalProperties": false,
      "properties": {
        "legend": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/definitions/Stream"
            }
          ]
        }
      },
      "required": [
        "legend"
      ],
      "type": "object"
    },
    "LineConfig": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align"
            },
            {
              "$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."
        },
        "angle": {
          "anyOf": [
            {
              "description": "The rotation angle of the text, in degrees.",
              "maximum": 360,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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 element, removing the mark item from the ARIA accessibility tree.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRole": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRoleDescription": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "aspect": {
          "anyOf": [
            {
              "description": "Whether to keep aspect ratio of image marks.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "baseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline"
            },
            {
              "$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": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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:__\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": [
            {
              "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cursor": {
          "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/ExprRef"
            }
          ]
        },
        "description": {
          "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/ExprRef"
            }
          ]
        },
        "dir": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dx": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dy": {
          "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.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ellipsis": {
          "anyOf": [
            {
              "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "endAngle": {
          "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/ExprRef"
            }
          ]
        },
        "fill": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "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": {
          "anyOf": [
            {
              "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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": {
          "anyOf": [
            {
              "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontSize": {
          "anyOf": [
            {
              "description": "The font size, in pixels.\n\n__Default value:__ `11`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style (e.g., `\"italic\"`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontWeight": {
          "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "height": {
          "anyOf": [
            {
              "description": "Height of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "href": {
          "anyOf": [
            {
              "$ref": "#/definitions/URI",
              "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "innerRadius": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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:\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"
            }
          ]
        },
        "invalid": {
          "anyOf": [
            {
              "$ref": "#/definitions/MarkInvalidDataMode"
            },
            {
              "type": "null"
            }
          ],
          "description": "Invalid data mode, which defines how the marks and corresponding scales should represent invalid values (`null` and `NaN` in continuous scales *without* defined output for invalid values).\n\n- `\"filter\"` — *Exclude* all invalid values from the visualization's *marks* and *scales*. For path marks (for line, area, trail), this option will create paths that connect valid points, as if the data rows with invalid values do not exist.\n\n- `\"break-paths-filter-domains\"` — Break path marks (for line, area, trail) at invalid values.  For non-path marks, this is equivalent to `\"filter\"`. All *scale* domains will *exclude* these filtered data points.\n\n- `\"break-paths-show-domains\"` — Break paths (for line, area, trail) at invalid values.  Hide invalid values for non-path marks. All *scale* domains will *include* these filtered data points (for both path and non-path marks).\n\n- `\"show\"` or `null` — Show all data points in the marks and scale domains. Each scale will use the output for invalid values defined in `config.scale.invalid` or, if unspecified, by default invalid values will produce the same visual values as zero (if the scale includes zero) or the minimum value (if the scale does not include zero).\n\n- `\"break-paths-show-path-domains\"` (default) — This is equivalent to `\"break-paths-show-domains\"` for path-based marks (line/area/trail) and `\"filter\"` for non-path marks.\n\n__Note__: If any channel's scale has an output for invalid values defined in `config.scale.invalid`, all values for the scales will be considered \"valid\" since they can produce a reasonable output for the scales. Thus, fields for such channels will not be filtered and will not cause path breaks."
        },
        "limit": {
          "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",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineBreak": {
          "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.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineHeight": {
          "anyOf": [
            {
              "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "opacity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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.\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": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "padAngle": {
          "anyOf": [
            {
              "description": "The angular padding applied to sides of the arc, in radians.",
              "type": "number"
            },
            {
              "$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/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.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
          "minimum": 0
        },
        "radius2": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "shape": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/definitions/SymbolShape"
                },
                {
                  "type": "string"
                }
              ],
              "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/ExprRef"
            }
          ]
        },
        "theta": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "time": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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"
        },
        "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": [
            {
              "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.\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": [
            {
              "$ref": "#/definitions/URI",
              "description": "The URL of the image file for image marks."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "width": {
          "anyOf": [
            {
              "description": "Width of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "x": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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"
    },
    "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. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. 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",
        "weekdayhours",
        "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"
        },
        "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"
    },
    "PredicateComposition": {
      "anyOf": [
        {
          "$ref": "#/definitions/LogicalNot<Predicate>"
        },
        {
          "$ref": "#/definitions/LogicalAnd<Predicate>"
        },
        {
          "$ref": "#/definitions/LogicalOr<Predicate>"
        },
        {
          "$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."
        },
        "fields": {
          "description": "Fields in foreign data or selection to lookup. If 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"
    },
    "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"
        },
        "key": {
          "$ref": "#/definitions/FieldName",
          "description": "Key in data to lookup."
        },
        "param": {
          "$ref": "#/definitions/ParameterName",
          "description": "Selection parameter name to look up."
        }
      },
      "required": [
        "key",
        "param"
      ],
      "type": "object"
    },
    "LookupTransform": {
      "additionalProperties": false,
      "properties": {
        "as": {
          "anyOf": [
            {
              "$ref": "#/definitions/FieldName"
            },
            {
              "items": {
                "$ref": "#/definitions/FieldName"
              },
              "type": "array"
            }
          ],
          "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`"
        },
        "from": {
          "anyOf": [
            {
              "$ref": "#/definitions/LookupData"
            },
            {
              "$ref": "#/definitions/LookupSelection"
            }
          ],
          "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": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align"
            },
            {
              "$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."
        },
        "angle": {
          "anyOf": [
            {
              "description": "The rotation angle of the text, in degrees.",
              "maximum": 360,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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 element, removing the mark item from the ARIA accessibility tree.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRole": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRoleDescription": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "aspect": {
          "anyOf": [
            {
              "description": "Whether to keep aspect ratio of image marks.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "baseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline"
            },
            {
              "$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": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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:__\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": [
            {
              "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cursor": {
          "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/ExprRef"
            }
          ]
        },
        "description": {
          "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/ExprRef"
            }
          ]
        },
        "dir": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dx": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dy": {
          "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.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ellipsis": {
          "anyOf": [
            {
              "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "endAngle": {
          "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/ExprRef"
            }
          ]
        },
        "fill": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "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": {
          "anyOf": [
            {
              "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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": {
          "anyOf": [
            {
              "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontSize": {
          "anyOf": [
            {
              "description": "The font size, in pixels.\n\n__Default value:__ `11`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style (e.g., `\"italic\"`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontWeight": {
          "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "height": {
          "anyOf": [
            {
              "description": "Height of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "href": {
          "anyOf": [
            {
              "$ref": "#/definitions/URI",
              "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "innerRadius": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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:\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"
            }
          ]
        },
        "invalid": {
          "anyOf": [
            {
              "$ref": "#/definitions/MarkInvalidDataMode"
            },
            {
              "type": "null"
            }
          ],
          "description": "Invalid data mode, which defines how the marks and corresponding scales should represent invalid values (`null` and `NaN` in continuous scales *without* defined output for invalid values).\n\n- `\"filter\"` — *Exclude* all invalid values from the visualization's *marks* and *scales*. For path marks (for line, area, trail), this option will create paths that connect valid points, as if the data rows with invalid values do not exist.\n\n- `\"break-paths-filter-domains\"` — Break path marks (for line, area, trail) at invalid values.  For non-path marks, this is equivalent to `\"filter\"`. All *scale* domains will *exclude* these filtered data points.\n\n- `\"break-paths-show-domains\"` — Break paths (for line, area, trail) at invalid values.  Hide invalid values for non-path marks. All *scale* domains will *include* these filtered data points (for both path and non-path marks).\n\n- `\"show\"` or `null` — Show all data points in the marks and scale domains. Each scale will use the output for invalid values defined in `config.scale.invalid` or, if unspecified, by default invalid values will produce the same visual values as zero (if the scale includes zero) or the minimum value (if the scale does not include zero).\n\n- `\"break-paths-show-path-domains\"` (default) — This is equivalent to `\"break-paths-show-domains\"` for path-based marks (line/area/trail) and `\"filter\"` for non-path marks.\n\n__Note__: If any channel's scale has an output for invalid values defined in `config.scale.invalid`, all values for the scales will be considered \"valid\" since they can produce a reasonable output for the scales. Thus, fields for such channels will not be filtered and will not cause path breaks."
        },
        "limit": {
          "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",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineBreak": {
          "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.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineHeight": {
          "anyOf": [
            {
              "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "opacity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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.\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": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "padAngle": {
          "anyOf": [
            {
              "description": "The angular padding applied to sides of the arc, in radians.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "radius": {
          "anyOf": [
            {
              "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.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
          "minimum": 0
        },
        "radius2": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "shape": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/definitions/SymbolShape"
                },
                {
                  "type": "string"
                }
              ],
              "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/ExprRef"
            }
          ]
        },
        "theta": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "time": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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"
        },
        "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": [
            {
              "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.\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": [
            {
              "$ref": "#/definitions/URI",
              "description": "The URL of the image file for image marks."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "width": {
          "anyOf": [
            {
              "description": "Width of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "x": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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"
    },
    "MarkDef": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align"
            },
            {
              "$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."
        },
        "angle": {
          "anyOf": [
            {
              "description": "The rotation angle of the text, in degrees.",
              "maximum": 360,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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 element, removing the mark item from the ARIA accessibility tree.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRole": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRoleDescription": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "aspect": {
          "anyOf": [
            {
              "description": "Whether to keep aspect ratio of image marks.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "bandSize": {
          "description": "The width of the ticks.\n\n__Default value:__  3/4 of step (width step for horizontal ticks and height step for vertical ticks).",
          "minimum": 0,
          "type": "number"
        },
        "baseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline"
            },
            {
              "$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."
        },
        "binSpacing": {
          "description": "Offset between bars for binned field. The 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"
        },
        "blend": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "clip": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Whether a mark be clipped to the enclosing group’s width and height."
        },
        "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:__\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`",
          "minimum": 0,
          "type": "number"
        },
        "cornerRadius": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusEnd": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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": [
            {
              "description": "The radius in pixels of rounded rectangles' top right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cursor": {
          "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/ExprRef"
            }
          ]
        },
        "description": {
          "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/ExprRef"
            }
          ]
        },
        "dir": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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
        },
        "dx": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dy": {
          "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.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ellipsis": {
          "anyOf": [
            {
              "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fill": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "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": {
          "anyOf": [
            {
              "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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": {
          "anyOf": [
            {
              "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontSize": {
          "anyOf": [
            {
              "description": "The font size, in pixels.\n\n__Default value:__ `11`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style (e.g., `\"italic\"`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontWeight": {
          "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "height": {
          "anyOf": [
            {
              "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": [
            {
              "$ref": "#/definitions/URI",
              "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "innerRadius": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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:\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"
            }
          ]
        },
        "invalid": {
          "anyOf": [
            {
              "$ref": "#/definitions/MarkInvalidDataMode"
            },
            {
              "type": "null"
            }
          ],
          "description": "Invalid data mode, which defines how the marks and corresponding scales should represent invalid values (`null` and `NaN` in continuous scales *without* defined output for invalid values).\n\n- `\"filter\"` — *Exclude* all invalid values from the visualization's *marks* and *scales*. For path marks (for line, area, trail), this option will create paths that connect valid points, as if the data rows with invalid values do not exist.\n\n- `\"break-paths-filter-domains\"` — Break path marks (for line, area, trail) at invalid values.  For non-path marks, this is equivalent to `\"filter\"`. All *scale* domains will *exclude* these filtered data points.\n\n- `\"break-paths-show-domains\"` — Break paths (for line, area, trail) at invalid values.  Hide invalid values for non-path marks. All *scale* domains will *include* these filtered data points (for both path and non-path marks).\n\n- `\"show\"` or `null` — Show all data points in the marks and scale domains. Each scale will use the output for invalid values defined in `config.scale.invalid` or, if unspecified, by default invalid values will produce the same visual values as zero (if the scale includes zero) or the minimum value (if the scale does not include zero).\n\n- `\"break-paths-show-path-domains\"` (default) — This is equivalent to `\"break-paths-show-domains\"` for path-based marks (line/area/trail) and `\"filter\"` for non-path marks.\n\n__Note__: If any channel's scale has an output for invalid values defined in `config.scale.invalid`, all values for the scales will be considered \"valid\" since they can produce a reasonable output for the scales. Thus, fields for such channels will not be filtered and will not cause path breaks."
        },
        "limit": {
          "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",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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`."
        },
        "lineBreak": {
          "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.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineHeight": {
          "anyOf": [
            {
              "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "minBandSize": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The minimum band size for bar and rectangle marks. __Default value:__ `0.25`"
        },
        "opacity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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.\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": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "padAngle": {
          "anyOf": [
            {
              "description": "The angular padding applied to sides of the arc, in radians.",
              "type": "number"
            },
            {
              "$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/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.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
          "minimum": 0
        },
        "radius2": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "radius2Offset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for radius2."
        },
        "radiusOffset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for radius."
        },
        "shape": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/definitions/SymbolShape"
                },
                {
                  "type": "string"
                }
              ],
              "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"
            }
          ]
        },
        "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"
            }
          ]
        },
        "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. __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": {
          "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/ExprRef"
            }
          ]
        },
        "theta": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "theta2Offset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for theta2."
        },
        "thetaOffset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for theta."
        },
        "thickness": {
          "description": "Thickness of the tick mark.\n\n__Default value:__  `1`",
          "minimum": 0,
          "type": "number"
        },
        "time": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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"
        },
        "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": [
            {
              "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.\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",
          "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\"`)."
        },
        "url": {
          "anyOf": [
            {
              "$ref": "#/definitions/URI",
              "description": "The URL of the image file for image marks."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "width": {
          "anyOf": [
            {
              "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": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "x2Offset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for x2-position."
        },
        "xOffset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for x-position."
        },
        "y": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "y2Offset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for y2-position."
        },
        "yOffset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for y-position."
        }
      },
      "required": [
        "type"
      ],
      "type": "object"
    },
    "MarkInvalidDataMode": {
      "enum": [
        "filter",
        "break-paths-filter-domains",
        "break-paths-show-domains",
        "break-paths-show-path-domains",
        "show"
      ],
      "type": "string"
    },
    "MarkPropDef<(Gradient|string|null)>": {
      "anyOf": [
        {
          "$ref": "#/definitions/FieldOrDatumDefWithCondition<MarkPropFieldDef,(Gradient|string|null)>"
        },
        {
          "$ref": "#/definitions/FieldOrDatumDefWithCondition<DatumDef,(Gradient|string|null)>"
        },
        {
          "$ref": "#/definitions/ValueDefWithCondition<MarkPropFieldOrDatumDef,(Gradient|string|null)>"
        }
      ]
    },
    "MarkPropDef<(string|null),TypeForShape>": {
      "anyOf": [
        {
          "$ref": "#/definitions/FieldOrDatumDefWithCondition<MarkPropFieldDef<TypeForShape>,(string|null)>"
        },
        {
          "$ref": "#/definitions/FieldOrDatumDefWithCondition<DatumDef,(string|null)>"
        },
        {
          "$ref": "#/definitions/ValueDefWithCondition<MarkPropFieldOrDatumDef<TypeForShape>,(string|null)>"
        }
      ]
    },
    "MarkPropDef<number>": {
      "anyOf": [
        {
          "$ref": "#/definitions/FieldOrDatumDefWithCondition<MarkPropFieldDef,number>"
        },
        {
          "$ref": "#/definitions/FieldOrDatumDefWithCondition<DatumDef,number>"
        },
        {
          "$ref": "#/definitions/ValueDefWithCondition<MarkPropFieldOrDatumDef,number>"
        }
      ]
    },
    "MarkPropDef<number[]>": {
      "anyOf": [
        {
          "$ref": "#/definitions/FieldOrDatumDefWithCondition<MarkPropFieldDef,number[]>"
        },
        {
          "$ref": "#/definitions/FieldOrDatumDefWithCondition<DatumDef,number[]>"
        },
        {
          "$ref": "#/definitions/ValueDefWithCondition<MarkPropFieldOrDatumDef,number[]>"
        }
      ]
    },
    "MarkType": {
      "enum": [
        "arc",
        "area",
        "image",
        "group",
        "line",
        "path",
        "rect",
        "rule",
        "shape",
        "symbol",
        "text",
        "trail"
      ],
      "type": "string"
    },
    "MergedStream": {
      "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"
        },
        "merge": {
          "items": {
            "$ref": "#/definitions/Stream"
          },
          "type": "array"
        },
        "throttle": {
          "type": "number"
        }
      },
      "required": [
        "merge"
      ],
      "type": "object"
    },
    "Month": {
      "maximum": 12,
      "minimum": 1,
      "type": "number"
    },
    "MultiLineString": {
      "additionalProperties": false,
      "description": "MultiLineString geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.5",
      "properties": {
        "bbox": {
          "$ref": "#/definitions/BBox",
          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
        },
        "coordinates": {
          "items": {
            "items": {
              "$ref": "#/definitions/Position"
            },
            "type": "array"
          },
          "type": "array"
        },
        "type": {
          "const": "MultiLineString",
          "description": "Specifies the type of GeoJSON object.",
          "type": "string"
        }
      },
      "required": [
        "coordinates",
        "type"
      ],
      "type": "object"
    },
    "MultiPoint": {
      "additionalProperties": false,
      "description": "MultiPoint geometry object.  https://tools.ietf.org/html/rfc7946#section-3.1.3",
      "properties": {
        "bbox": {
          "$ref": "#/definitions/BBox",
          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
        },
        "coordinates": {
          "items": {
            "$ref": "#/definitions/Position"
          },
          "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. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. https://tools.ietf.org/html/rfc7946#section-5"
        },
        "coordinates": {
          "items": {
            "items": {
              "items": {
                "$ref": "#/definitions/Position"
              },
              "type": "array"
            },
            "type": "array"
          },
          "type": "array"
        },
        "type": {
          "const": "MultiPolygon",
          "description": "Specifies the type of GeoJSON object.",
          "type": "string"
        }
      },
      "required": [
        "coordinates",
        "type"
      ],
      "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.\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"
        }
      },
      "required": [
        "name"
      ],
      "type": "object"
    },
    "NonArgAggregateOp": {
      "enum": [
        "average",
        "count",
        "distinct",
        "max",
        "mean",
        "median",
        "min",
        "missing",
        "product",
        "q1",
        "q3",
        "ci0",
        "ci1",
        "stderr",
        "stdev",
        "stdevp",
        "sum",
        "valid",
        "values",
        "variance",
        "variancep",
        "exponential",
        "exponentialb"
      ],
      "type": "string"
    },
    "NonLayerRepeatSpec": {
      "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. 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.\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"
        },
        "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: 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."
        },
        "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)"
        },
        "spec": {
          "$ref": "#/definitions/NonNormalizedSpec",
          "description": "A specification of the view that gets repeated."
        },
        "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": [
        "repeat",
        "spec"
      ],
      "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>"
    },
    "OffsetDef": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleFieldDef"
        },
        {
          "$ref": "#/definitions/ScaleDatumDef"
        },
        {
          "$ref": "#/definitions/ValueDef<number>"
        }
      ]
    },
    "OrderFieldDef": {
      "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"
            },
            {
              "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."
        },
        "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`."
        },
        "sort": {
          "$ref": "#/definitions/SortOrder",
          "description": "The sort order. One of `\"ascending\"` (default) or `\"descending\"`."
        },
        "timeUnit": {
          "anyOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "OrderOnlyDef": {
      "additionalProperties": false,
      "properties": {
        "sort": {
          "$ref": "#/definitions/SortOrder",
          "description": "The sort order. One of `\"ascending\"` (default) or `\"descending\"`."
        }
      },
      "type": "object"
    },
    "OrderValueDef": {
      "additionalProperties": false,
      "properties": {
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalValueDef<number>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<number>"
              },
              "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."
        },
        "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"
    },
    "Orient": {
      "enum": [
        "left",
        "right",
        "top",
        "bottom"
      ],
      "type": "string"
    },
    "Orientation": {
      "enum": [
        "horizontal",
        "vertical"
      ],
      "type": "string"
    },
    "OverlayMarkDef": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align"
            },
            {
              "$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."
        },
        "angle": {
          "anyOf": [
            {
              "description": "The rotation angle of the text, in degrees.",
              "maximum": 360,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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 element, removing the mark item from the ARIA accessibility tree.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRole": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRoleDescription": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "aspect": {
          "anyOf": [
            {
              "description": "Whether to keep aspect ratio of image marks.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "baseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline"
            },
            {
              "$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": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "clip": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Whether a mark be clipped to the enclosing group’s width and height."
        },
        "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:__\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": [
            {
              "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cursor": {
          "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/ExprRef"
            }
          ]
        },
        "description": {
          "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/ExprRef"
            }
          ]
        },
        "dir": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dx": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dy": {
          "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.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ellipsis": {
          "anyOf": [
            {
              "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "endAngle": {
          "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/ExprRef"
            }
          ]
        },
        "fill": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "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": {
          "anyOf": [
            {
              "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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": {
          "anyOf": [
            {
              "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontSize": {
          "anyOf": [
            {
              "description": "The font size, in pixels.\n\n__Default value:__ `11`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style (e.g., `\"italic\"`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontWeight": {
          "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "height": {
          "anyOf": [
            {
              "description": "Height of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "href": {
          "anyOf": [
            {
              "$ref": "#/definitions/URI",
              "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "innerRadius": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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:\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"
            }
          ]
        },
        "invalid": {
          "anyOf": [
            {
              "$ref": "#/definitions/MarkInvalidDataMode"
            },
            {
              "type": "null"
            }
          ],
          "description": "Invalid data mode, which defines how the marks and corresponding scales should represent invalid values (`null` and `NaN` in continuous scales *without* defined output for invalid values).\n\n- `\"filter\"` — *Exclude* all invalid values from the visualization's *marks* and *scales*. For path marks (for line, area, trail), this option will create paths that connect valid points, as if the data rows with invalid values do not exist.\n\n- `\"break-paths-filter-domains\"` — Break path marks (for line, area, trail) at invalid values.  For non-path marks, this is equivalent to `\"filter\"`. All *scale* domains will *exclude* these filtered data points.\n\n- `\"break-paths-show-domains\"` — Break paths (for line, area, trail) at invalid values.  Hide invalid values for non-path marks. All *scale* domains will *include* these filtered data points (for both path and non-path marks).\n\n- `\"show\"` or `null` — Show all data points in the marks and scale domains. Each scale will use the output for invalid values defined in `config.scale.invalid` or, if unspecified, by default invalid values will produce the same visual values as zero (if the scale includes zero) or the minimum value (if the scale does not include zero).\n\n- `\"break-paths-show-path-domains\"` (default) — This is equivalent to `\"break-paths-show-domains\"` for path-based marks (line/area/trail) and `\"filter\"` for non-path marks.\n\n__Note__: If any channel's scale has an output for invalid values defined in `config.scale.invalid`, all values for the scales will be considered \"valid\" since they can produce a reasonable output for the scales. Thus, fields for such channels will not be filtered and will not cause path breaks."
        },
        "limit": {
          "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",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineBreak": {
          "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.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineHeight": {
          "anyOf": [
            {
              "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "opacity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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.\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": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "padAngle": {
          "anyOf": [
            {
              "description": "The angular padding applied to sides of the arc, in radians.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "radius": {
          "anyOf": [
            {
              "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.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
          "minimum": 0
        },
        "radius2": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "radius2Offset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for radius2."
        },
        "radiusOffset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for radius."
        },
        "shape": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/definitions/SymbolShape"
                },
                {
                  "type": "string"
                }
              ],
              "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"
            }
          ]
        },
        "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. __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": {
          "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/ExprRef"
            }
          ]
        },
        "theta": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "theta2Offset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for theta2."
        },
        "thetaOffset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for theta."
        },
        "time": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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"
        },
        "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": [
            {
              "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.\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": [
            {
              "$ref": "#/definitions/URI",
              "description": "The URL of the image file for image marks."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "width": {
          "anyOf": [
            {
              "description": "Width of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "x": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "x2Offset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for x2-position."
        },
        "xOffset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for x-position."
        },
        "y": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "y2Offset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for y2-position."
        },
        "yOffset": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Offset for y-position."
        }
      },
      "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
    },
    "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."
            },
            "param": {
              "$ref": "#/definitions/ParameterName",
              "description": "The name of a parameter."
            }
          },
          "required": [
            "param"
          ],
          "type": "object"
        }
      ]
    },
    "ParameterName": {
      "type": "string"
    },
    "ParameterPredicate": {
      "additionalProperties": false,
      "properties": {
        "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."
        }
      },
      "required": [
        "param"
      ],
      "type": "object"
    },
    "Parse": {
      "additionalProperties": {
        "$ref": "#/definitions/ParseValue"
      },
      "type": "object"
    },
    "ParseValue": {
      "type": [
        "string",
        "null"
      ]
    },
    "PivotTransform": {
      "additionalProperties": false,
      "properties": {
        "groupby": {
          "description": "The optional data fields to group by. If not specified, a single group containing all data objects will be used.",
          "items": {
            "$ref": "#/definitions/FieldName"
          },
          "type": "array"
        },
        "limit": {
          "description": "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`",
          "type": "number"
        },
        "op": {
          "$ref": "#/definitions/AggregateOp",
          "description": "The aggregation operation to apply to grouped `value` field values. __Default value:__ `sum`"
        },
        "pivot": {
          "$ref": "#/definitions/FieldName",
          "description": "The data field to pivot on. The unique values of this field become new field names in the output stream."
        },
        "value": {
          "$ref": "#/definitions/FieldName",
          "description": "The data field to populate pivoted fields. The aggregate values of this field become the values of the new pivoted fields."
        }
      },
      "required": [
        "pivot",
        "value"
      ],
      "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. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. 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": [
        {
          "$ref": "#/definitions/PositionFieldDefBase"
        },
        {
          "$ref": "#/definitions/PositionDatumDefBase"
        },
        {
          "$ref": "#/definitions/PositionValueDef"
        }
      ]
    },
    "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. The value of the bbox member is an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. 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.\n\nNote: the type will not be narrowed down to `[number, number] | [number, number, number]` due to marginal benefits and the large impact of breaking change.\n\nSee previous discussions on the type narrowing:\n-  {@link  https://github.com/DefinitelyTyped/DefinitelyTyped/pull/21590 Nov 2017 } \n-  {@link  https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/67773 Dec 2023 } \n-  {@link  https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/71441 Dec 2024 } \n\nOne can use a  {@link  https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates user-defined type guard that returns a type predicate }  to determine if a position is a 2D or 3D position.",
      "items": {
        "type": "number"
      },
      "type": "array"
    },
    "Position2Def": {
      "anyOf": [
        {
          "$ref": "#/definitions/SecondaryFieldDef"
        },
        {
          "$ref": "#/definitions/DatumDef"
        },
        {
          "$ref": "#/definitions/PositionValueDef"
        }
      ]
    },
    "PositionDatumDef": {
      "additionalProperties": false,
      "properties": {
        "axis": {
          "anyOf": [
            {
              "$ref": "#/definitions/Axis"
            },
            {
              "type": "null"
            }
          ],
          "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."
        },
        "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."
        },
        "impute": {
          "anyOf": [
            {
              "$ref": "#/definitions/ImputeParams"
            },
            {
              "type": "null"
            }
          ],
          "description": "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.\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."
        },
        "stack": {
          "anyOf": [
            {
              "$ref": "#/definitions/StackOffset"
            },
            {
              "type": "null"
            },
            {
              "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:\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:\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"
    },
    "PositionDatumDefBase": {
      "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."
        },
        "stack": {
          "anyOf": [
            {
              "$ref": "#/definitions/StackOffset"
            },
            {
              "type": "null"
            },
            {
              "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:\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:\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"
    },
    "PositionDef": {
      "anyOf": [
        {
          "$ref": "#/definitions/PositionFieldDef"
        },
        {
          "$ref": "#/definitions/PositionDatumDef"
        },
        {
          "$ref": "#/definitions/PositionValueDef"
        }
      ]
    },
    "PositionFieldDef": {
      "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."
        },
        "axis": {
          "anyOf": [
            {
              "$ref": "#/definitions/Axis"
            },
            {
              "type": "null"
            }
          ],
          "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."
        },
        "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#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`."
        },
        "impute": {
          "anyOf": [
            {
              "$ref": "#/definitions/ImputeParams"
            },
            {
              "type": "null"
            }
          ],
          "description": "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.\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 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": [
            {
              "$ref": "#/definitions/StackOffset"
            },
            {
              "type": "null"
            },
            {
              "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:\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": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "PositionFieldDefBase": {
      "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"
            },
            {
              "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."
        },
        "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."
        },
        "stack": {
          "anyOf": [
            {
              "$ref": "#/definitions/StackOffset"
            },
            {
              "type": "null"
            },
            {
              "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:\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": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "PositionValueDef": {
      "$ref": "#/definitions/ValueDef<(number|\"width\"|\"height\"|ExprRef)>"
    },
    "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/ParameterPredicate"
        },
        {
          "type": "string"
        }
      ]
    },
    "PrimitiveValue": {
      "type": [
        "number",
        "string",
        "boolean",
        "null"
      ]
    },
    "Projection": {
      "additionalProperties": false,
      "properties": {
        "center": {
          "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": {
          "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": {
          "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": {
          "anyOf": [
            {
              "description": "The coefficient parameter for the `hammer` projection.\n\n__Default value:__ `2`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "distance": {
          "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": {
          "anyOf": [
            {
              "$ref": "#/definitions/Vector2<Vector2<number>>"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fit": {
          "anyOf": [
            {
              "$ref": "#/definitions/Fit"
            },
            {
              "items": {
                "$ref": "#/definitions/Fit"
              },
              "type": "array"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fraction": {
          "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": {
          "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": {
          "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": {
          "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": {
          "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": {
          "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": {
          "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": {
          "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": {
          "anyOf": [
            {
              "description": "Sets whether or not the x-dimension is reflected (negated) in the output.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "reflectY": {
          "anyOf": [
            {
              "description": "Sets whether or not the y-dimension is reflected (negated) in the output.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "rotate": {
          "anyOf": [
            {
              "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/ExprRef"
            }
          ]
        },
        "scale": {
          "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": {
          "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": {
          "anyOf": [
            {
              "description": "The spacing parameter for the `lagrange` projection.\n\n__Default value:__ `0.5`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "tilt": {
          "anyOf": [
            {
              "description": "The tilt angle (in degrees) for the `satellite` projection.\n\n__Default value:__ `0`.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "translate": {
          "anyOf": [
            {
              "$ref": "#/definitions/Vector2<number>"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The projection’s translation offset as a two-element array `[tx, ty]`."
        },
        "type": {
          "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"
    },
    "ProjectionConfig": {
      "$ref": "#/definitions/Projection",
      "description": "Any property of Projection can be in config"
    },
    "ProjectionType": {
      "enum": [
        "albers",
        "albersUsa",
        "azimuthalEqualArea",
        "azimuthalEquidistant",
        "conicConformal",
        "conicEqualArea",
        "conicEquidistant",
        "equalEarth",
        "equirectangular",
        "gnomonic",
        "identity",
        "mercator",
        "naturalEarth1",
        "orthographic",
        "stereographic",
        "transverseMercator"
      ],
      "type": "string"
    },
    "QuantileTransform": {
      "additionalProperties": false,
      "properties": {
        "as": {
          "description": "The output field names for the probability and quantile values.\n\n__Default value:__ `[\"prob\", \"value\"]`",
          "items": {
            "$ref": "#/definitions/FieldName"
          },
          "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"
        },
        "probs": {
          "description": "An array of probabilities in the range (0, 1) for which to compute quantile values. If not specified, the *step* parameter will be used.",
          "items": {
            "type": "number"
          },
          "type": "array"
        },
        "quantile": {
          "$ref": "#/definitions/FieldName",
          "description": "The data field for which to perform quantile estimation."
        },
        "step": {
          "description": "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.",
          "type": "number"
        }
      },
      "required": [
        "quantile"
      ],
      "type": "object"
    },
    "RadialGradient": {
      "additionalProperties": false,
      "properties": {
        "gradient": {
          "const": "radial",
          "description": "The type of gradient. Use `\"radial\"` for a radial gradient.",
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "r1": {
          "description": "The radius length, in normalized [0, 1] coordinates, of the inner circle for the gradient.\n\n__Default value:__ `0`",
          "type": "number"
        },
        "r2": {
          "description": "The radius length, in normalized [0, 1] coordinates, of the outer circle for the gradient.\n\n__Default value:__ `0.5`",
          "type": "number"
        },
        "stops": {
          "description": "An array of gradient stops defining the gradient color sequence.",
          "items": {
            "$ref": "#/definitions/GradientStop"
          },
          "type": "array"
        },
        "x1": {
          "description": "The x-coordinate, in normalized [0, 1] coordinates, for the center of the inner circle for the gradient.\n\n__Default value:__ `0.5`",
          "type": "number"
        },
        "x2": {
          "description": "The x-coordinate, in normalized [0, 1] coordinates, for the center of the outer circle for the gradient.\n\n__Default value:__ `0.5`",
          "type": "number"
        },
        "y1": {
          "description": "The y-coordinate, in normalized [0, 1] coordinates, for the center of the inner circle for the gradient.\n\n__Default value:__ `0.5`",
          "type": "number"
        },
        "y2": {
          "description": "The y-coordinate, in normalized [0, 1] coordinates, for the center of the outer circle for the gradient.\n\n__Default value:__ `0.5`",
          "type": "number"
        }
      },
      "required": [
        "gradient",
        "stops"
      ],
      "type": "object"
    },
    "RangeConfig": {
      "additionalProperties": {
        "anyOf": [
          {
            "$ref": "#/definitions/RangeScheme"
          },
          {
            "type": "array"
          }
        ]
      },
      "properties": {
        "category": {
          "anyOf": [
            {
              "$ref": "#/definitions/RangeScheme"
            },
            {
              "items": {
                "$ref": "#/definitions/Color"
              },
              "type": "array"
            }
          ],
          "description": "Default [color scheme](https://vega.github.io/vega/docs/schemes/) for categorical data."
        },
        "diverging": {
          "anyOf": [
            {
              "$ref": "#/definitions/RangeScheme"
            },
            {
              "items": {
                "$ref": "#/definitions/Color"
              },
              "type": "array"
            }
          ],
          "description": "Default [color scheme](https://vega.github.io/vega/docs/schemes/) for diverging quantitative ramps."
        },
        "heatmap": {
          "anyOf": [
            {
              "$ref": "#/definitions/RangeScheme"
            },
            {
              "items": {
                "$ref": "#/definitions/Color"
              },
              "type": "array"
            }
          ],
          "description": "Default [color scheme](https://vega.github.io/vega/docs/schemes/) for quantitative heatmaps."
        },
        "ordinal": {
          "anyOf": [
            {
              "$ref": "#/definitions/RangeScheme"
            },
            {
              "items": {
                "$ref": "#/definitions/Color"
              },
              "type": "array"
            }
          ],
          "description": "Default [color scheme](https://vega.github.io/vega/docs/schemes/) for rank-ordered data."
        },
        "ramp": {
          "anyOf": [
            {
              "$ref": "#/definitions/RangeScheme"
            },
            {
              "items": {
                "$ref": "#/definitions/Color"
              },
              "type": "array"
            }
          ],
          "description": "Default [color scheme](https://vega.github.io/vega/docs/schemes/) for sequential quantitative ramps."
        },
        "symbol": {
          "description": "Array of [symbol](https://vega.github.io/vega/docs/marks/symbol/) names or paths for the default shape palette.",
          "items": {
            "$ref": "#/definitions/SymbolShape"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "RangeEnum": {
      "enum": [
        "width",
        "height",
        "symbol",
        "category",
        "ordinal",
        "ramp",
        "diverging",
        "heatmap"
      ],
      "type": "string"
    },
    "RangeRaw": {
      "items": {
        "anyOf": [
          {
            "type": "null"
          },
          {
            "type": "boolean"
          },
          {
            "type": "string"
          },
          {
            "type": "number"
          },
          {
            "$ref": "#/definitions/RangeRawArray"
          }
        ]
      },
      "type": "array"
    },
    "RangeRawArray": {
      "items": {
        "type": "number"
      },
      "type": "array"
    },
    "RangeScheme": {
      "anyOf": [
        {
          "$ref": "#/definitions/RangeEnum"
        },
        {
          "$ref": "#/definitions/RangeRaw"
        },
        {
          "additionalProperties": false,
          "properties": {
            "count": {
              "type": "number"
            },
            "extent": {
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            "scheme": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "$ref": "#/definitions/ColorScheme"
                }
              ]
            }
          },
          "required": [
            "scheme"
          ],
          "type": "object"
        }
      ]
    },
    "RectConfig": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align"
            },
            {
              "$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."
        },
        "angle": {
          "anyOf": [
            {
              "description": "The rotation angle of the text, in degrees.",
              "maximum": 360,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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 element, removing the mark item from the ARIA accessibility tree.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRole": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRoleDescription": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "aspect": {
          "anyOf": [
            {
              "description": "Whether to keep aspect ratio of image marks.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "baseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline"
            },
            {
              "$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."
        },
        "binSpacing": {
          "description": "Offset between bars for binned field. The 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"
        },
        "blend": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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:__\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`",
          "minimum": 0,
          "type": "number"
        },
        "cornerRadius": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cursor": {
          "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/ExprRef"
            }
          ]
        },
        "description": {
          "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/ExprRef"
            }
          ]
        },
        "dir": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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
        },
        "dx": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dy": {
          "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.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ellipsis": {
          "anyOf": [
            {
              "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "endAngle": {
          "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/ExprRef"
            }
          ]
        },
        "fill": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "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": {
          "anyOf": [
            {
              "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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": {
          "anyOf": [
            {
              "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontSize": {
          "anyOf": [
            {
              "description": "The font size, in pixels.\n\n__Default value:__ `11`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style (e.g., `\"italic\"`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontWeight": {
          "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "height": {
          "anyOf": [
            {
              "description": "Height of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "href": {
          "anyOf": [
            {
              "$ref": "#/definitions/URI",
              "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "innerRadius": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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:\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"
            }
          ]
        },
        "invalid": {
          "anyOf": [
            {
              "$ref": "#/definitions/MarkInvalidDataMode"
            },
            {
              "type": "null"
            }
          ],
          "description": "Invalid data mode, which defines how the marks and corresponding scales should represent invalid values (`null` and `NaN` in continuous scales *without* defined output for invalid values).\n\n- `\"filter\"` — *Exclude* all invalid values from the visualization's *marks* and *scales*. For path marks (for line, area, trail), this option will create paths that connect valid points, as if the data rows with invalid values do not exist.\n\n- `\"break-paths-filter-domains\"` — Break path marks (for line, area, trail) at invalid values.  For non-path marks, this is equivalent to `\"filter\"`. All *scale* domains will *exclude* these filtered data points.\n\n- `\"break-paths-show-domains\"` — Break paths (for line, area, trail) at invalid values.  Hide invalid values for non-path marks. All *scale* domains will *include* these filtered data points (for both path and non-path marks).\n\n- `\"show\"` or `null` — Show all data points in the marks and scale domains. Each scale will use the output for invalid values defined in `config.scale.invalid` or, if unspecified, by default invalid values will produce the same visual values as zero (if the scale includes zero) or the minimum value (if the scale does not include zero).\n\n- `\"break-paths-show-path-domains\"` (default) — This is equivalent to `\"break-paths-show-domains\"` for path-based marks (line/area/trail) and `\"filter\"` for non-path marks.\n\n__Note__: If any channel's scale has an output for invalid values defined in `config.scale.invalid`, all values for the scales will be considered \"valid\" since they can produce a reasonable output for the scales. Thus, fields for such channels will not be filtered and will not cause path breaks."
        },
        "limit": {
          "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",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineBreak": {
          "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.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineHeight": {
          "anyOf": [
            {
              "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "minBandSize": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The minimum band size for bar and rectangle marks. __Default value:__ `0.25`"
        },
        "opacity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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.\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": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "padAngle": {
          "anyOf": [
            {
              "description": "The angular padding applied to sides of the arc, in radians.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "radius": {
          "anyOf": [
            {
              "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.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
          "minimum": 0
        },
        "radius2": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "shape": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/definitions/SymbolShape"
                },
                {
                  "type": "string"
                }
              ],
              "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/ExprRef"
            }
          ]
        },
        "theta": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "time": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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"
        },
        "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": [
            {
              "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.\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": [
            {
              "$ref": "#/definitions/URI",
              "description": "The URL of the image file for image marks."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "width": {
          "anyOf": [
            {
              "description": "Width of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "x": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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"
    },
    "RegressionTransform": {
      "additionalProperties": false,
      "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"
          },
          "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"
          },
          "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"
        },
        "method": {
          "description": "The functional form of the regression model. One of `\"linear\"`, `\"log\"`, `\"exp\"`, `\"pow\"`, `\"quad\"`, or `\"poly\"`.\n\n__Default value:__ `\"linear\"`",
          "enum": [
            "linear",
            "log",
            "exp",
            "pow",
            "quad",
            "poly"
          ],
          "type": "string"
        },
        "on": {
          "$ref": "#/definitions/FieldName",
          "description": "The data field of the independent variable to use a predictor."
        },
        "order": {
          "description": "The polynomial order (number of coefficients) for the 'poly' method.\n\n__Default value:__ `3`",
          "type": "number"
        },
        "params": {
          "description": "A boolean flag indicating if the transform should return the regression model parameters (one object per group), rather than trend line points. The resulting objects include a `coef` array of fitted coefficient values (starting with the intercept term and then including terms of increasing order) and an `rSquared` value (indicating the total variance explained by the model).\n\n__Default value:__ `false`",
          "type": "boolean"
        },
        "regression": {
          "$ref": "#/definitions/FieldName",
          "description": "The data field of the dependent variable to predict."
        }
      },
      "required": [
        "regression",
        "on"
      ],
      "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": {
        "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": "Reference to a repeated value.",
      "properties": {
        "repeat": {
          "enum": [
            "row",
            "column",
            "repeat",
            "layer"
          ],
          "type": "string"
        }
      },
      "required": [
        "repeat"
      ],
      "type": "object"
    },
    "RepeatSpec": {
      "anyOf": [
        {
          "$ref": "#/definitions/NonLayerRepeatSpec"
        },
        {
          "$ref": "#/definitions/LayerRepeatSpec"
        }
      ]
    },
    "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. Scales and guides can be resolved to be `\"independent\"` or `\"shared\"`.",
      "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"
    },
    "RowColumnEncodingFieldDef": {
      "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": {
          "$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.\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\"`."
        },
        "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."
        },
        "center": {
          "description": "Boolean flag indicating if facet's subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
          "type": "boolean"
        },
        "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": {
          "anyOf": [
            {
              "$ref": "#/definitions/Header"
            },
            {
              "type": "null"
            }
          ],
          "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`."
        },
        "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)",
          "type": "number"
        },
        "timeUnit": {
          "anyOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "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": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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`"
        },
        "base": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The logarithm base of the `log` scale (default `10`)."
        },
        "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:\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": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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)."
        },
        "constant": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "A constant determining the slope of the symlog function around zero. Only used for `symlog` scales.\n\n__Default value:__ `1`"
        },
        "domain": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "boolean"
                  },
                  {
                    "$ref": "#/definitions/DateTime"
                  },
                  {
                    "$ref": "#/definitions/ExprRef"
                  }
                ]
              },
              "type": "array"
            },
            {
              "const": "unaggregated",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ParameterExtent"
            },
            {
              "$ref": "#/definitions/DomainUnionWith"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/DateTime"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Sets the maximum value in the scale domain, overriding the `domain` property. This property is only intended for use with scales having continuous domains."
        },
        "domainMid": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Inserts a single mid-point value into a two-element domain. The mid-point value must lie between the domain minimum and maximum values. This property can be useful for setting a midpoint for [diverging color scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise). The domainMid property is only intended for use with scales supporting continuous, piecewise domains."
        },
        "domainMin": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/DateTime"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Sets the minimum value in the scale domain, overriding the domain property. This property is only intended for use with scales having continuous domains."
        },
        "domainRaw": {
          "$ref": "#/definitions/ExprRef",
          "description": "An expression for an array of raw values that, if non-null, directly overrides the _domain_ property. This is useful for supporting interactions such as panning or zooming a scale. The scale may be initially determined using a data-driven domain, then modified in response to user input by setting the rawDomain value."
        },
        "exponent": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The exponent of the `pow` scale."
        },
        "interpolate": {
          "anyOf": [
            {
              "$ref": "#/definitions/ScaleInterpolateEnum"
            },
            {
              "$ref": "#/definitions/ExprRef"
            },
            {
              "$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/TimeInterval"
            },
            {
              "$ref": "#/definitions/TimeIntervalStep"
            },
            {
              "$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 without explicit domain bounds; `false` otherwise."
        },
        "padding": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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`. For _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
        },
        "paddingInner": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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
        },
        "paddingOuter": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "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].\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. By default, Vega-Lite sets outer padding such that _width/height = number of unique values * step_.",
          "maximum": 1,
          "minimum": 0
        },
        "range": {
          "anyOf": [
            {
              "$ref": "#/definitions/RangeEnum"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "items": {
                      "type": "number"
                    },
                    "type": "array"
                  },
                  {
                    "$ref": "#/definitions/ExprRef"
                  }
                ]
              },
              "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`)."
        },
        "rangeMax": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Sets the maximum value in the scale range, overriding the `range` property or the default range. This property is only intended for use with scales having continuous ranges."
        },
        "rangeMin": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Sets the minimum value in the scale range, overriding the `range` property or the default range. This property is only intended for use with scales having continuous ranges."
        },
        "reverse": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "If true, reverses the order of the scale range. __Default value:__ `false`."
        },
        "round": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "If `true`, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid.\n\n__Default value:__ `false`."
        },
        "scheme": {
          "anyOf": [
            {
              "$ref": "#/definitions/ColorScheme"
            },
            {
              "$ref": "#/definitions/SchemeParams"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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\nTo set a custom scheme, instead set the list of values [as the scale range](https://vega.github.io/vega-lite/docs/scale.html#2-setting-the-range-property-to-an-array-of-valid-css-color-strings).\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": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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": "object"
    },
    "ScaleBinParams": {
      "additionalProperties": false,
      "properties": {
        "start": {
          "description": "The starting (lowest-valued) bin boundary.\n\n__Default value:__ The lowest value of the scale domain will be used.",
          "type": "number"
        },
        "step": {
          "description": "The step size defining the bin interval width.",
          "type": "number"
        },
        "stop": {
          "description": "The stopping (highest-valued) bin boundary.\n\n__Default value:__ The highest value of the scale domain will be used.",
          "type": "number"
        }
      },
      "required": [
        "step"
      ],
      "type": "object"
    },
    "ScaleBins": {
      "anyOf": [
        {
          "items": {
            "type": "number"
          },
          "type": "array"
        },
        {
          "$ref": "#/definitions/ScaleBinParams"
        }
      ]
    },
    "ScaleConfig": {
      "additionalProperties": false,
      "properties": {
        "animationDuration": {
          "description": "Default animation duration (in seconds) for time encodings, except for [`band`](https://vega.github.io/vega-lite/docs/scale.html#band) scales.\n\n__Default value:__ `5`",
          "type": "number"
        },
        "bandPaddingInner": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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
        },
        "bandPaddingOuter": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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
        },
        "barBandPaddingInner": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Default inner padding for `x` and `y` band-ordinal scales of `\"bar\"` marks.\n\n__Default value:__ `0.1`",
          "maximum": 1,
          "minimum": 0
        },
        "clamp": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "If true, values that exceed the data domain are clamped to either the minimum or maximum range value"
        },
        "continuousPadding": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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
        },
        "framesPerSecond": {
          "description": "Default framerate (frames per second) for time [`band`](https://vega.github.io/vega-lite/docs/scale.html#band) scales.\n\n__Default value:__ `2`",
          "type": "number"
        },
        "invalid": {
          "$ref": "#/definitions/ScaleInvalidDataConfig",
          "description": "An object that defines scale outputs per channel for invalid values (nulls and NaNs on a continuous scale).\n- The keys in this object are the scale channels.\n- The values is either `\"zero-or-min\"` (use zero if the scale includes zero or min value otherwise) or a value definition `{value: ...}`.\n\n_Example:_ Setting this `config.scale.invalid` property to `{color: {value: '#aaa'}}` will make the visualization color all invalid values with '#aaa'.\n\nSee [https://vega.github.io/vega-lite/docs/invalid-data.html](Invalid Data Docs) for more details."
        },
        "maxBandSize": {
          "description": "The default max value for mapping quantitative fields to bar's size/bandSize.\n\nIf undefined (default), we will use the axis's size (width or height) - 1.",
          "minimum": 0,
          "type": "number"
        },
        "maxFontSize": {
          "description": "The default max value for mapping quantitative fields to text's size/fontSize scale.\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.\n\n__Default value:__ `2`",
          "minimum": 0,
          "type": "number"
        },
        "minFontSize": {
          "description": "The default min value for mapping quantitative fields to text's size/fontSize scale.\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.\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.\n\n__Default value:__ `1`",
          "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": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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
        },
        "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"
        },
        "rectBandPaddingInner": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Default inner padding for `x` and `y` band-ordinal scales of `\"rect\"` marks.\n\n__Default value:__ `0`",
          "maximum": 1,
          "minimum": 0
        },
        "round": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "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.)"
        },
        "tickBandPaddingInner": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "Default inner padding for `x` and `y` band-ordinal scales of `\"tick\"` marks.\n\n__Default value:__ `0.25`",
          "maximum": 1,
          "minimum": 0
        },
        "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"
        },
        "xReverse": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "ScaleInterpolateEnum": {
      "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"
    },
    "ScaleInvalidDataConfig": {
      "additionalProperties": false,
      "properties": {
        "angle": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"angle\">"
        },
        "color": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"color\">"
        },
        "fill": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"fill\">"
        },
        "fillOpacity": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"fillOpacity\">"
        },
        "opacity": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"opacity\">"
        },
        "radius": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"radius\">"
        },
        "shape": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"shape\">"
        },
        "size": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"size\">"
        },
        "stroke": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"stroke\">"
        },
        "strokeDash": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"strokeDash\">"
        },
        "strokeOpacity": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"strokeOpacity\">"
        },
        "strokeWidth": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"strokeWidth\">"
        },
        "theta": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"theta\">"
        },
        "time": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"time\">"
        },
        "x": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"x\">"
        },
        "xOffset": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"xOffset\">"
        },
        "y": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"y\">"
        },
        "yOffset": {
          "$ref": "#/definitions/ScaleInvalidDataShowAs<\"yOffset\">"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAs<\"angle\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"angle\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"color\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"color\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"fill\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"fill\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"fillOpacity\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"fillOpacity\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"opacity\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"opacity\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"radius\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"radius\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"shape\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"shape\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"size\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"size\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"stroke\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"stroke\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"strokeDash\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"strokeDash\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"strokeOpacity\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"strokeOpacity\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"strokeWidth\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"strokeWidth\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"theta\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"theta\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"time\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"time\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"x\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"x\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"xOffset\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"xOffset\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"y\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"y\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAs<\"yOffset\">": {
      "anyOf": [
        {
          "$ref": "#/definitions/ScaleInvalidDataShowAsValue<\"yOffset\">"
        },
        {
          "const": "zero-or-min",
          "type": "string"
        }
      ]
    },
    "ScaleInvalidDataShowAsValue<\"angle\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "description": "The rotation angle of the text, in degrees.",
          "maximum": 360,
          "minimum": 0,
          "type": "number"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"color\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/Gradient"
            }
          ],
          "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`."
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"fill\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "type": "null"
            }
          ],
          "description": "Default fill color. This property has higher precedence than `config.color`. Set to `null` to remove fill.\n\n__Default value:__ (None)"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"fillOpacity\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
          "maximum": 1,
          "minimum": 0,
          "type": "number"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"opacity\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "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"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"radius\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "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,
          "type": "number"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"shape\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "anyOf": [
            {
              "$ref": "#/definitions/SymbolShape"
            },
            {
              "type": "string"
            }
          ],
          "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": "object"
    },
    "ScaleInvalidDataShowAsValue<\"size\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "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,
          "type": "number"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"stroke\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "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)"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"strokeDash\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
          "items": {
            "type": "number"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"strokeOpacity\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
          "maximum": 1,
          "minimum": 0,
          "type": "number"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"strokeWidth\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "description": "The stroke width, in pixels.",
          "minimum": 0,
          "type": "number"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"theta\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "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"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"time\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "type": "number"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"x\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "const": "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."
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"xOffset\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "description": "Offset for x-position.",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"y\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "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."
        }
      },
      "type": "object"
    },
    "ScaleInvalidDataShowAsValue<\"yOffset\">": {
      "additionalProperties": false,
      "properties": {
        "value": {
          "description": "Offset for y-position.",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ScaleResolveMap": {
      "additionalProperties": false,
      "properties": {
        "angle": {
          "$ref": "#/definitions/ResolveMode"
        },
        "color": {
          "$ref": "#/definitions/ResolveMode"
        },
        "fill": {
          "$ref": "#/definitions/ResolveMode"
        },
        "fillOpacity": {
          "$ref": "#/definitions/ResolveMode"
        },
        "opacity": {
          "$ref": "#/definitions/ResolveMode"
        },
        "radius": {
          "$ref": "#/definitions/ResolveMode"
        },
        "shape": {
          "$ref": "#/definitions/ResolveMode"
        },
        "size": {
          "$ref": "#/definitions/ResolveMode"
        },
        "stroke": {
          "$ref": "#/definitions/ResolveMode"
        },
        "strokeDash": {
          "$ref": "#/definitions/ResolveMode"
        },
        "strokeOpacity": {
          "$ref": "#/definitions/ResolveMode"
        },
        "strokeWidth": {
          "$ref": "#/definitions/ResolveMode"
        },
        "theta": {
          "$ref": "#/definitions/ResolveMode"
        },
        "time": {
          "$ref": "#/definitions/ResolveMode"
        },
        "x": {
          "$ref": "#/definitions/ResolveMode"
        },
        "xOffset": {
          "$ref": "#/definitions/ResolveMode"
        },
        "y": {
          "$ref": "#/definitions/ResolveMode"
        },
        "yOffset": {
          "$ref": "#/definitions/ResolveMode"
        }
      },
      "type": "object"
    },
    "ScaleType": {
      "enum": [
        "linear",
        "log",
        "pow",
        "sqrt",
        "symlog",
        "identity",
        "sequential",
        "time",
        "utc",
        "quantile",
        "quantize",
        "threshold",
        "bin-ordinal",
        "ordinal",
        "point",
        "band"
      ],
      "type": "string"
    },
    "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": {
          "$ref": "#/definitions/ColorScheme",
          "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."
        }
      },
      "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 (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": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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": "object"
    },
    "SelectionConfig": {
      "additionalProperties": false,
      "properties": {
        "interval": {
          "$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."
        },
        "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"
    },
    "SelectionInit": {
      "anyOf": [
        {
          "$ref": "#/definitions/PrimitiveValue"
        },
        {
          "$ref": "#/definitions/DateTime"
        }
      ]
    },
    "SelectionInitInterval": {
      "anyOf": [
        {
          "$ref": "#/definitions/Vector2<boolean>"
        },
        {
          "$ref": "#/definitions/Vector2<number>"
        },
        {
          "$ref": "#/definitions/Vector2<string>"
        },
        {
          "$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": [
        "name",
        "select"
      ],
      "type": "object"
    },
    "SelectionResolution": {
      "enum": [
        "global",
        "union",
        "intersect"
      ],
      "type": "string"
    },
    "SelectionType": {
      "enum": [
        "point",
        "interval"
      ],
      "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"
    },
    "SequentialMultiHue": {
      "enum": [
        "turbo",
        "viridis",
        "inferno",
        "magma",
        "plasma",
        "cividis",
        "bluegreen",
        "bluegreen-3",
        "bluegreen-4",
        "bluegreen-5",
        "bluegreen-6",
        "bluegreen-7",
        "bluegreen-8",
        "bluegreen-9",
        "bluepurple",
        "bluepurple-3",
        "bluepurple-4",
        "bluepurple-5",
        "bluepurple-6",
        "bluepurple-7",
        "bluepurple-8",
        "bluepurple-9",
        "goldgreen",
        "goldgreen-3",
        "goldgreen-4",
        "goldgreen-5",
        "goldgreen-6",
        "goldgreen-7",
        "goldgreen-8",
        "goldgreen-9",
        "goldorange",
        "goldorange-3",
        "goldorange-4",
        "goldorange-5",
        "goldorange-6",
        "goldorange-7",
        "goldorange-8",
        "goldorange-9",
        "goldred",
        "goldred-3",
        "goldred-4",
        "goldred-5",
        "goldred-6",
        "goldred-7",
        "goldred-8",
        "goldred-9",
        "greenblue",
        "greenblue-3",
        "greenblue-4",
        "greenblue-5",
        "greenblue-6",
        "greenblue-7",
        "greenblue-8",
        "greenblue-9",
        "orangered",
        "orangered-3",
        "orangered-4",
        "orangered-5",
        "orangered-6",
        "orangered-7",
        "orangered-8",
        "orangered-9",
        "purplebluegreen",
        "purplebluegreen-3",
        "purplebluegreen-4",
        "purplebluegreen-5",
        "purplebluegreen-6",
        "purplebluegreen-7",
        "purplebluegreen-8",
        "purplebluegreen-9",
        "purpleblue",
        "purpleblue-3",
        "purpleblue-4",
        "purpleblue-5",
        "purpleblue-6",
        "purpleblue-7",
        "purpleblue-8",
        "purpleblue-9",
        "purplered",
        "purplered-3",
        "purplered-4",
        "purplered-5",
        "purplered-6",
        "purplered-7",
        "purplered-8",
        "purplered-9",
        "redpurple",
        "redpurple-3",
        "redpurple-4",
        "redpurple-5",
        "redpurple-6",
        "redpurple-7",
        "redpurple-8",
        "redpurple-9",
        "yellowgreenblue",
        "yellowgreenblue-3",
        "yellowgreenblue-4",
        "yellowgreenblue-5",
        "yellowgreenblue-6",
        "yellowgreenblue-7",
        "yellowgreenblue-8",
        "yellowgreenblue-9",
        "yellowgreen",
        "yellowgreen-3",
        "yellowgreen-4",
        "yellowgreen-5",
        "yellowgreen-6",
        "yellowgreen-7",
        "yellowgreen-8",
        "yellowgreen-9",
        "yelloworangebrown",
        "yelloworangebrown-3",
        "yelloworangebrown-4",
        "yelloworangebrown-5",
        "yelloworangebrown-6",
        "yelloworangebrown-7",
        "yelloworangebrown-8",
        "yelloworangebrown-9",
        "yelloworangered",
        "yelloworangered-3",
        "yelloworangered-4",
        "yelloworangered-5",
        "yelloworangered-6",
        "yelloworangered-7",
        "yelloworangered-8",
        "yelloworangered-9",
        "darkblue",
        "darkblue-3",
        "darkblue-4",
        "darkblue-5",
        "darkblue-6",
        "darkblue-7",
        "darkblue-8",
        "darkblue-9",
        "darkgold",
        "darkgold-3",
        "darkgold-4",
        "darkgold-5",
        "darkgold-6",
        "darkgold-7",
        "darkgold-8",
        "darkgold-9",
        "darkgreen",
        "darkgreen-3",
        "darkgreen-4",
        "darkgreen-5",
        "darkgreen-6",
        "darkgreen-7",
        "darkgreen-8",
        "darkgreen-9",
        "darkmulti",
        "darkmulti-3",
        "darkmulti-4",
        "darkmulti-5",
        "darkmulti-6",
        "darkmulti-7",
        "darkmulti-8",
        "darkmulti-9",
        "darkred",
        "darkred-3",
        "darkred-4",
        "darkred-5",
        "darkred-6",
        "darkred-7",
        "darkred-8",
        "darkred-9",
        "lightgreyred",
        "lightgreyred-3",
        "lightgreyred-4",
        "lightgreyred-5",
        "lightgreyred-6",
        "lightgreyred-7",
        "lightgreyred-8",
        "lightgreyred-9",
        "lightgreyteal",
        "lightgreyteal-3",
        "lightgreyteal-4",
        "lightgreyteal-5",
        "lightgreyteal-6",
        "lightgreyteal-7",
        "lightgreyteal-8",
        "lightgreyteal-9",
        "lightmulti",
        "lightmulti-3",
        "lightmulti-4",
        "lightmulti-5",
        "lightmulti-6",
        "lightmulti-7",
        "lightmulti-8",
        "lightmulti-9",
        "lightorange",
        "lightorange-3",
        "lightorange-4",
        "lightorange-5",
        "lightorange-6",
        "lightorange-7",
        "lightorange-8",
        "lightorange-9",
        "lighttealblue",
        "lighttealblue-3",
        "lighttealblue-4",
        "lighttealblue-5",
        "lighttealblue-6",
        "lighttealblue-7",
        "lighttealblue-8",
        "lighttealblue-9"
      ],
      "type": "string"
    },
    "SequentialSingleHue": {
      "enum": [
        "blues",
        "tealblues",
        "teals",
        "greens",
        "browns",
        "greys",
        "purples",
        "warmgreys",
        "reds",
        "oranges"
      ],
      "type": "string"
    },
    "ShapeDef": {
      "$ref": "#/definitions/MarkPropDef<(string|null),TypeForShape>"
    },
    "SharedEncoding": {
      "additionalProperties": false,
      "properties": {
        "angle": {
          "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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": {
              "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)."
            }
          },
          "type": "object"
        },
        "color": {
          "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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": {
              "anyOf": [
                {
                  "$ref": "#/definitions/Gradient"
                },
                {
                  "type": "string"
                },
                {
                  "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)."
            }
          },
          "type": "object"
        },
        "description": {
          "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"
                },
                {
                  "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(string|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(string|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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",
              "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": {
              "$ref": "#/definitions/Format",
              "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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/BinnedTimeUnit"
                },
                {
                  "$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."
            },
            "value": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "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)."
            }
          },
          "type": "object"
        },
        "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."
        },
        "fill": {
          "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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": {
              "anyOf": [
                {
                  "$ref": "#/definitions/Gradient"
                },
                {
                  "type": "string"
                },
                {
                  "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)."
            }
          },
          "type": "object"
        },
        "fillOpacity": {
          "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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": {
              "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)."
            }
          },
          "type": "object"
        },
        "href": {
          "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"
                },
                {
                  "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(string|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(string|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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",
              "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": {
              "$ref": "#/definitions/Format",
              "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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/BinnedTimeUnit"
                },
                {
                  "$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."
            },
            "value": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "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)."
            }
          },
          "type": "object"
        },
        "key": {
          "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"
                },
                {
                  "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."
            },
            "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": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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"
        },
        "latitude": {
          "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"
            },
            "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`."
            },
            "timeUnit": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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": [
                {
                  "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"
                },
                {
                  "$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."
            }
          },
          "type": "object"
        },
        "latitude2": {
          "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"
            },
            "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`."
            },
            "timeUnit": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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/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."
            },
            "value": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "const": "width",
                  "type": "string"
                },
                {
                  "const": "height",
                  "type": "string"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "longitude": {
          "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"
            },
            "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`."
            },
            "timeUnit": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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": [
                {
                  "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"
                },
                {
                  "$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."
            }
          },
          "type": "object"
        },
        "longitude2": {
          "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"
            },
            "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`."
            },
            "timeUnit": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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/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."
            },
            "value": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "const": "width",
                  "type": "string"
                },
                {
                  "const": "height",
                  "type": "string"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "opacity": {
          "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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": {
              "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)."
            }
          },
          "type": "object"
        },
        "order": {
          "anyOf": [
            {
              "$ref": "#/definitions/OrderFieldDef"
            },
            {
              "items": {
                "$ref": "#/definitions/OrderFieldDef"
              },
              "type": "array"
            },
            {
              "$ref": "#/definitions/OrderValueDef"
            },
            {
              "$ref": "#/definitions/OrderOnlyDef"
            }
          ],
          "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,
          "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"
                },
                {
                  "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."
            },
            "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."
            },
            "stack": {
              "anyOf": [
                {
                  "$ref": "#/definitions/StackOffset"
                },
                {
                  "type": "null"
                },
                {
                  "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:\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": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "const": "width",
                  "type": "string"
                },
                {
                  "const": "height",
                  "type": "string"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "radius2": {
          "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"
            },
            "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`."
            },
            "timeUnit": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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/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."
            },
            "value": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "const": "width",
                  "type": "string"
                },
                {
                  "const": "height",
                  "type": "string"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "shape": {
          "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(string|null|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef<TypeForShape>"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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/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."
                },
                {
                  "$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": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "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)."
            }
          },
          "type": "object"
        },
        "size": {
          "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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": {
              "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)."
            }
          },
          "type": "object"
        },
        "stroke": {
          "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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": {
              "anyOf": [
                {
                  "$ref": "#/definitions/Gradient"
                },
                {
                  "type": "string"
                },
                {
                  "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)."
            }
          },
          "type": "object"
        },
        "strokeDash": {
          "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number[]|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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": {
              "anyOf": [
                {
                  "items": {
                    "type": "number"
                  },
                  "type": "array"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "strokeOpacity": {
          "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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": {
              "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)."
            }
          },
          "type": "object"
        },
        "strokeWidth": {
          "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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": {
              "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)."
            }
          },
          "type": "object"
        },
        "text": {
          "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"
                },
                {
                  "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."
            },
            "condition": {
              "anyOf": [
                {
                  "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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalStringFieldDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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": [
                {
                  "$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`."
            },
            "format": {
              "$ref": "#/definitions/Format",
              "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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/BinnedTimeUnit"
                },
                {
                  "$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": {
              "anyOf": [
                {
                  "$ref": "#/definitions/Text"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "theta": {
          "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"
                },
                {
                  "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."
            },
            "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."
            },
            "stack": {
              "anyOf": [
                {
                  "$ref": "#/definitions/StackOffset"
                },
                {
                  "type": "null"
                },
                {
                  "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:\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": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "const": "width",
                  "type": "string"
                },
                {
                  "const": "height",
                  "type": "string"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "theta2": {
          "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"
            },
            "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`."
            },
            "timeUnit": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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/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."
            },
            "value": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "const": "width",
                  "type": "string"
                },
                {
                  "const": "height",
                  "type": "string"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "time": {
          "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`."
            },
            "rescale": {
              "type": "boolean"
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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"
        },
        "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": {
          "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"
                },
                {
                  "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."
            },
            "condition": {
              "anyOf": [
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(string|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(string|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."
                },
                {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
                    },
                    {
                      "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
                    },
                    {
                      "items": {
                        "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
                      },
                      "type": "array"
                    }
                  ],
                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                }
              ],
              "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",
              "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": {
              "$ref": "#/definitions/Format",
              "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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/BinnedTimeUnit"
                },
                {
                  "$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."
            },
            "value": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "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)."
            }
          },
          "type": "object"
        },
        "x": {
          "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."
            },
            "axis": {
              "anyOf": [
                {
                  "$ref": "#/definitions/Axis"
                },
                {
                  "type": "null"
                }
              ],
              "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."
            },
            "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#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`."
            },
            "impute": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ImputeParams"
                },
                {
                  "type": "null"
                }
              ],
              "description": "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.\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 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": [
                {
                  "$ref": "#/definitions/StackOffset"
                },
                {
                  "type": "null"
                },
                {
                  "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:\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": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "const": "width",
                  "type": "string"
                },
                {
                  "const": "height",
                  "type": "string"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "x2": {
          "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"
            },
            "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`."
            },
            "timeUnit": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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/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."
            },
            "value": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "const": "width",
                  "type": "string"
                },
                {
                  "const": "height",
                  "type": "string"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "xError": {
          "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": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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."
            },
            "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"
        },
        "xError2": {
          "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": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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).",
              "type": "number"
            }
          },
          "type": "object"
        },
        "y": {
          "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."
            },
            "axis": {
              "anyOf": [
                {
                  "$ref": "#/definitions/Axis"
                },
                {
                  "type": "null"
                }
              ],
              "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."
            },
            "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#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`."
            },
            "impute": {
              "anyOf": [
                {
                  "$ref": "#/definitions/ImputeParams"
                },
                {
                  "type": "null"
                }
              ],
              "description": "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.\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 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": [
                {
                  "$ref": "#/definitions/StackOffset"
                },
                {
                  "type": "null"
                },
                {
                  "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:\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": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "const": "width",
                  "type": "string"
                },
                {
                  "const": "height",
                  "type": "string"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "y2": {
          "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"
            },
            "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`."
            },
            "timeUnit": {
              "anyOf": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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/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."
            },
            "value": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "const": "width",
                  "type": "string"
                },
                {
                  "const": "height",
                  "type": "string"
                },
                {
                  "$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)."
            }
          },
          "type": "object"
        },
        "yError": {
          "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": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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."
            },
            "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"
        },
        "yError2": {
          "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": [
                {
                  "$ref": "#/definitions/TimeUnit"
                },
                {
                  "$ref": "#/definitions/BinnedTimeUnit"
                },
                {
                  "$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."
            },
            "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/BinnedTimeUnit"
                },
                {
                  "$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).",
              "type": "number"
            }
          },
          "type": "object"
        }
      },
      "type": "object"
    },
    "SingleDefUnitChannel": {
      "enum": [
        "text",
        "shape",
        "x",
        "y",
        "xOffset",
        "yOffset",
        "x2",
        "y2",
        "longitude",
        "latitude",
        "longitude2",
        "latitude2",
        "theta",
        "theta2",
        "radius",
        "radius2",
        "time",
        "color",
        "fill",
        "stroke",
        "opacity",
        "fillOpacity",
        "strokeOpacity",
        "strokeWidth",
        "strokeDash",
        "size",
        "angle",
        "key",
        "href",
        "url",
        "description"
      ],
      "type": "string"
    },
    "SingleTimeUnit": {
      "anyOf": [
        {
          "$ref": "#/definitions/LocalSingleTimeUnit"
        },
        {
          "$ref": "#/definitions/UtcSingleTimeUnit"
        }
      ]
    },
    "Sort": {
      "anyOf": [
        {
          "$ref": "#/definitions/SortArray"
        },
        {
          "$ref": "#/definitions/AllSortString"
        },
        {
          "$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"
        }
      ]
    },
    "SortByChannel": {
      "enum": [
        "x",
        "y",
        "color",
        "fill",
        "stroke",
        "strokeWidth",
        "size",
        "shape",
        "fillOpacity",
        "strokeOpacity",
        "opacity",
        "text"
      ],
      "type": "string"
    },
    "SortByChannelDesc": {
      "enum": [
        "-x",
        "-y",
        "-color",
        "-fill",
        "-stroke",
        "-strokeWidth",
        "-size",
        "-shape",
        "-fillOpacity",
        "-strokeOpacity",
        "-opacity",
        "-text"
      ],
      "type": "string"
    },
    "SortByEncoding": {
      "additionalProperties": false,
      "properties": {
        "encoding": {
          "$ref": "#/definitions/SortByChannel",
          "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` (do 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` (do 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": [
            {
              "const": true,
              "type": "boolean"
            },
            {
              "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"
              },
              "maxItems": 2,
              "minItems": 2,
              "type": "array"
            }
          ],
          "description": "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 be `\"val_end\"`."
        },
        "groupby": {
          "description": "The data fields to group by.",
          "items": {
            "$ref": "#/definitions/FieldName"
          },
          "type": "array"
        },
        "offset": {
          "description": "Mode for stacking marks. One of `\"zero\"` (default), `\"center\"`, or `\"normalize\"`. The `\"zero\"` offset will stack starting at `0`. The `\"center\"` offset will center the stacks. The `\"normalize\"` offset will compute percentage values for each stack point, with output values in the range `[0,1]`.\n\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"
    },
    "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"
        }
      },
      "required": [
        "step"
      ],
      "type": "object"
    },
    "StepFor": {
      "enum": [
        "position",
        "offset"
      ],
      "type": "string"
    },
    "Stream": {
      "anyOf": [
        {
          "$ref": "#/definitions/EventStream"
        },
        {
          "$ref": "#/definitions/DerivedStream"
        },
        {
          "$ref": "#/definitions/MergedStream"
        }
      ]
    },
    "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."
        },
        "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#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`."
        },
        "format": {
          "$ref": "#/definitions/Format",
          "description": "The text format specifier for formatting number and date/time in labels of guides (axes, legends, headers) and text marks.\n\nIf the format type is `\"number\"` (e.g., for quantitative fields), this is a D3's [number format pattern string](https://github.com/d3/d3-format#locale_format).\n\nIf the format type is `\"time\"` (e.g., for temporal fields), this is either:   a) D3's [time format pattern](https://d3js.org/d3-time-format#locale_format) if you desire to set a static time format.\n\n  b) [dynamic time format specifier object](https://vega.github.io/vega-lite/docs/format.html#dynamic-time-format) if you desire to set a dynamic time format that uses different formats depending on the granularity of the input date (e.g., if the date lies on a year, month, date, hour, etc. boundary).\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/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "StringFieldDefWithCondition": {
      "$ref": "#/definitions/FieldOrDatumDefWithCondition<StringFieldDef,string>"
    },
    "StringValueDefWithCondition": {
      "$ref": "#/definitions/ValueDefWithCondition<MarkPropFieldOrDatumDef,(string|null)>"
    },
    "StrokeCap": {
      "enum": [
        "butt",
        "round",
        "square"
      ],
      "type": "string"
    },
    "StrokeJoin": {
      "enum": [
        "miter",
        "round",
        "bevel"
      ],
      "type": "string"
    },
    "StyleConfigIndex": {
      "additionalProperties": {
        "anyOf": [
          {
            "$ref": "#/definitions/AnyMarkConfig"
          },
          {
            "$ref": "#/definitions/Axis"
          }
        ]
      },
      "properties": {
        "arc": {
          "$ref": "#/definitions/RectConfig",
          "description": "Arc-specific Config"
        },
        "area": {
          "$ref": "#/definitions/AreaConfig",
          "description": "Area-Specific Config"
        },
        "bar": {
          "$ref": "#/definitions/BarConfig",
          "description": "Bar-Specific Config"
        },
        "circle": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Circle-Specific Config"
        },
        "geoshape": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Geoshape-Specific Config"
        },
        "group-subtitle": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Default style for chart subtitles"
        },
        "group-title": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Default style for chart titles"
        },
        "guide-label": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Default style for axis, legend, and header labels."
        },
        "guide-title": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Default style for axis, legend, and header titles."
        },
        "image": {
          "$ref": "#/definitions/RectConfig",
          "description": "Image-specific Config"
        },
        "line": {
          "$ref": "#/definitions/LineConfig",
          "description": "Line-Specific Config"
        },
        "mark": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Mark Config"
        },
        "point": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Point-Specific Config"
        },
        "rect": {
          "$ref": "#/definitions/RectConfig",
          "description": "Rect-Specific Config"
        },
        "rule": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Rule-Specific Config"
        },
        "square": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Square-Specific Config"
        },
        "text": {
          "$ref": "#/definitions/MarkConfig",
          "description": "Text-Specific Config"
        },
        "tick": {
          "$ref": "#/definitions/TickConfig",
          "description": "Tick-Specific Config"
        },
        "trail": {
          "$ref": "#/definitions/LineConfig",
          "description": "Trail-Specific Config"
        }
      },
      "type": "object"
    },
    "SymbolShape": {
      "type": "string"
    },
    "Text": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      ]
    },
    "TextBaseline": {
      "anyOf": [
        {
          "const": "alphabetic",
          "type": "string"
        },
        {
          "$ref": "#/definitions/Baseline"
        },
        {
          "const": "line-top",
          "type": "string"
        },
        {
          "const": "line-bottom",
          "type": "string"
        }
      ]
    },
    "TextDef": {
      "anyOf": [
        {
          "$ref": "#/definitions/FieldOrDatumDefWithCondition<StringFieldDef,Text>"
        },
        {
          "$ref": "#/definitions/FieldOrDatumDefWithCondition<StringDatumDef,Text>"
        },
        {
          "$ref": "#/definitions/ValueDefWithCondition<StringFieldDef,Text>"
        }
      ]
    },
    "TextDirection": {
      "enum": [
        "ltr",
        "rtl"
      ],
      "type": "string"
    },
    "TickConfig": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "anyOf": [
            {
              "$ref": "#/definitions/Align"
            },
            {
              "$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."
        },
        "angle": {
          "anyOf": [
            {
              "description": "The rotation angle of the text, in degrees.",
              "maximum": 360,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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 element, removing the mark item from the ARIA accessibility tree.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRole": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ariaRoleDescription": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "aspect": {
          "anyOf": [
            {
              "description": "Whether to keep aspect ratio of image marks.",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "bandSize": {
          "description": "The width of the ticks.\n\n__Default value:__  3/4 of step (width step for horizontal ticks and height step for vertical ticks).",
          "minimum": 0,
          "type": "number"
        },
        "baseline": {
          "anyOf": [
            {
              "$ref": "#/definitions/TextBaseline"
            },
            {
              "$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."
        },
        "binSpacing": {
          "description": "Offset between bars for binned field. The 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"
        },
        "blend": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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:__\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`",
          "minimum": 0,
          "type": "number"
        },
        "cornerRadius": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusBottomRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' bottom right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopLeft": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top right corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cornerRadiusTopRight": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles' top left corner.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cursor": {
          "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/ExprRef"
            }
          ]
        },
        "description": {
          "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/ExprRef"
            }
          ]
        },
        "dir": {
          "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\"`"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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
        },
        "dx": {
          "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"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dy": {
          "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.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "ellipsis": {
          "anyOf": [
            {
              "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "endAngle": {
          "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/ExprRef"
            }
          ]
        },
        "fill": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "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": {
          "anyOf": [
            {
              "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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": {
          "anyOf": [
            {
              "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontSize": {
          "anyOf": [
            {
              "description": "The font size, in pixels.\n\n__Default value:__ `11`",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "The font style (e.g., `\"italic\"`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontWeight": {
          "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "height": {
          "anyOf": [
            {
              "description": "Height of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "href": {
          "anyOf": [
            {
              "$ref": "#/definitions/URI",
              "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "innerRadius": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "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:\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"
            }
          ]
        },
        "invalid": {
          "anyOf": [
            {
              "$ref": "#/definitions/MarkInvalidDataMode"
            },
            {
              "type": "null"
            }
          ],
          "description": "Invalid data mode, which defines how the marks and corresponding scales should represent invalid values (`null` and `NaN` in continuous scales *without* defined output for invalid values).\n\n- `\"filter\"` — *Exclude* all invalid values from the visualization's *marks* and *scales*. For path marks (for line, area, trail), this option will create paths that connect valid points, as if the data rows with invalid values do not exist.\n\n- `\"break-paths-filter-domains\"` — Break path marks (for line, area, trail) at invalid values.  For non-path marks, this is equivalent to `\"filter\"`. All *scale* domains will *exclude* these filtered data points.\n\n- `\"break-paths-show-domains\"` — Break paths (for line, area, trail) at invalid values.  Hide invalid values for non-path marks. All *scale* domains will *include* these filtered data points (for both path and non-path marks).\n\n- `\"show\"` or `null` — Show all data points in the marks and scale domains. Each scale will use the output for invalid values defined in `config.scale.invalid` or, if unspecified, by default invalid values will produce the same visual values as zero (if the scale includes zero) or the minimum value (if the scale does not include zero).\n\n- `\"break-paths-show-path-domains\"` (default) — This is equivalent to `\"break-paths-show-domains\"` for path-based marks (line/area/trail) and `\"filter\"` for non-path marks.\n\n__Note__: If any channel's scale has an output for invalid values defined in `config.scale.invalid`, all values for the scales will be considered \"valid\" since they can produce a reasonable output for the scales. Thus, fields for such channels will not be filtered and will not cause path breaks."
        },
        "limit": {
          "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",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineBreak": {
          "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.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineHeight": {
          "anyOf": [
            {
              "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "minBandSize": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The minimum band size for bar and rectangle marks. __Default value:__ `0.25`"
        },
        "opacity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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.\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": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "padAngle": {
          "anyOf": [
            {
              "description": "The angular padding applied to sides of the arc, in radians.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "radius": {
          "anyOf": [
            {
              "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.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
          "minimum": 0
        },
        "radius2": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
          "minimum": 0
        },
        "shape": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/definitions/SymbolShape"
                },
                {
                  "type": "string"
                }
              ],
              "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/ExprRef"
            }
          ]
        },
        "theta": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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."
        },
        "thickness": {
          "description": "Thickness of the tick mark.\n\n__Default value:__  `1`",
          "minimum": 0,
          "type": "number"
        },
        "time": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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"
        },
        "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": [
            {
              "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.\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": [
            {
              "$ref": "#/definitions/URI",
              "description": "The URL of the image file for image marks."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "width": {
          "anyOf": [
            {
              "description": "Width of the marks.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "x": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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": {
          "anyOf": [
            {
              "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"
    },
    "TickCount": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "$ref": "#/definitions/TimeInterval"
        },
        {
          "$ref": "#/definitions/TimeIntervalStep"
        }
      ]
    },
    "TimeDef": {
      "$ref": "#/definitions/TimeFieldDef"
    },
    "TimeFieldDef": {
      "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`."
        },
        "rescale": {
          "type": "boolean"
        },
        "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/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "TimeFormatSpecifier": {
      "additionalProperties": false,
      "properties": {
        "date": {
          "type": "string"
        },
        "day": {
          "type": "string"
        },
        "hours": {
          "type": "string"
        },
        "milliseconds": {
          "type": "string"
        },
        "minutes": {
          "type": "string"
        },
        "month": {
          "type": "string"
        },
        "quarter": {
          "type": "string"
        },
        "seconds": {
          "type": "string"
        },
        "week": {
          "type": "string"
        },
        "year": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "TimeInterval": {
      "enum": [
        "millisecond",
        "second",
        "minute",
        "hour",
        "day",
        "week",
        "month",
        "year"
      ],
      "type": "string"
    },
    "TimeIntervalStep": {
      "additionalProperties": false,
      "properties": {
        "interval": {
          "$ref": "#/definitions/TimeInterval"
        },
        "step": {
          "type": "number"
        }
      },
      "required": [
        "interval",
        "step"
      ],
      "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": [
        {
          "$ref": "#/definitions/SingleTimeUnit"
        },
        {
          "$ref": "#/definitions/MultiTimeUnit"
        }
      ]
    },
    "TimeUnitParams": {
      "additionalProperties": false,
      "description": "Time Unit Params for encoding predicate, which can specified if the data is  already \"binned\".",
      "properties": {
        "binned": {
          "description": "Whether the data has already been binned to this time unit. If true, Vega-Lite will only format the data, marks, and guides, without applying the timeUnit transform to re-bin the data again.",
          "type": "boolean"
        },
        "maxbins": {
          "description": "If no `unit` is specified, maxbins is used to infer time units.",
          "type": "number"
        },
        "step": {
          "description": "The number of steps between bins, in terms of the least significant unit provided.",
          "type": "number"
        },
        "unit": {
          "$ref": "#/definitions/TimeUnit",
          "description": "Defines how date-time values should be binned."
        },
        "utc": {
          "description": "True to use UTC timezone. Equivalent to using a `utc` prefixed `TimeUnit`.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "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": {
          "anyOf": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/TimeUnitTransformParams"
            }
          ],
          "description": "The timeUnit."
        }
      },
      "required": [
        "timeUnit",
        "field",
        "as"
      ],
      "type": "object"
    },
    "TimeUnitTransformParams": {
      "additionalProperties": false,
      "properties": {
        "maxbins": {
          "description": "If no `unit` is specified, maxbins is used to infer time units.",
          "type": "number"
        },
        "step": {
          "description": "The number of steps between bins, in terms of the least significant unit provided.",
          "type": "number"
        },
        "unit": {
          "$ref": "#/definitions/TimeUnit",
          "description": "Defines how date-time values should be binned."
        },
        "utc": {
          "description": "True to use UTC timezone. Equivalent to using a `utc` prefixed `TimeUnit`.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "TitleAnchor": {
      "enum": [
        null,
        "start",
        "middle",
        "end"
      ],
      "type": [
        "null",
        "string"
      ]
    },
    "TitleConfig": {
      "$ref": "#/definitions/BaseTitleNoValueRefs"
    },
    "TitleFrame": {
      "enum": [
        "bounds",
        "group"
      ],
      "type": "string"
    },
    "TitleOrient": {
      "enum": [
        "none",
        "left",
        "right",
        "top",
        "bottom"
      ],
      "type": "string"
    },
    "TitleParams": {
      "additionalProperties": false,
      "properties": {
        "align": {
          "$ref": "#/definitions/Align",
          "description": "Horizontal text alignment for title text. One of `\"left\"`, `\"center\"`, or `\"right\"`."
        },
        "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. `\"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": {
          "anyOf": [
            {
              "description": "Angle in degrees of title and subtitle text.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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 title from the ARIA accessibility tree.\n\n__Default value:__ `true`",
              "type": "boolean"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "baseline": {
          "$ref": "#/definitions/TextBaseline",
          "description": "Vertical text baseline for title and subtitle text. 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."
        },
        "color": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Text color for title text."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dx": {
          "anyOf": [
            {
              "description": "Delta offset for title and subtitle text x-coordinate.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "dy": {
          "anyOf": [
            {
              "description": "Delta offset for title and subtitle text y-coordinate.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "font": {
          "anyOf": [
            {
              "description": "Font name for title text.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontSize": {
          "anyOf": [
            {
              "description": "Font size in pixels for title text.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "Font style for title text."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "fontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight",
              "description": "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "frame": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "$ref": "#/definitions/TitleFrame"
                },
                {
                  "type": "string"
                }
              ],
              "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)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "limit": {
          "anyOf": [
            {
              "description": "The maximum allowed length in pixels of title and subtitle text.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "lineHeight": {
          "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"
            }
          ]
        },
        "offset": {
          "anyOf": [
            {
              "description": "The orthogonal offset in pixels by which to displace the title group from its position along the edge of the chart.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "orient": {
          "anyOf": [
            {
              "$ref": "#/definitions/TitleOrient",
              "description": "Default title orientation (`\"top\"`, `\"bottom\"`, `\"left\"`, or `\"right\"`)"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "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\"`."
        },
        "subtitle": {
          "$ref": "#/definitions/Text",
          "description": "The subtitle Text."
        },
        "subtitleColor": {
          "anyOf": [
            {
              "anyOf": [
                {
                  "type": "null"
                },
                {
                  "$ref": "#/definitions/Color"
                }
              ],
              "description": "Text color for subtitle text."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitleFont": {
          "anyOf": [
            {
              "description": "Font name for subtitle text.",
              "type": "string"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitleFontSize": {
          "anyOf": [
            {
              "description": "Font size in pixels for subtitle text.",
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitleFontStyle": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontStyle",
              "description": "Font style for subtitle text."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitleFontWeight": {
          "anyOf": [
            {
              "$ref": "#/definitions/FontWeight",
              "description": "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`)."
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitleLineHeight": {
          "anyOf": [
            {
              "description": "Line height in pixels for multi-line subtitle text.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "subtitlePadding": {
          "anyOf": [
            {
              "description": "The padding in pixels between title and subtitle text.",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "text": {
          "anyOf": [
            {
              "$ref": "#/definitions/Text"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The title text."
        },
        "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/v6.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. 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": [
            {
              "$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`"
        },
        "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\"`"
        },
        "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"
        },
        "concat": {
          "description": "A list of views to be concatenated.",
          "items": {
            "$ref": "#/definitions/NonNormalizedSpec"
          },
          "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. 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": {
          "description": "Description of this mark for commenting purpose.",
          "type": "string"
        },
        "name": {
          "description": "Name of the visualization for later reference.",
          "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 or selections that parameterize a visualization.",
          "items": {
            "$ref": "#/definitions/TopLevelParameter"
          },
          "type": "array"
        },
        "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. 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"
        },
        "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": [
        "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/v6.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": "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`"
        },
        "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\"`"
        },
        "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. 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": {
          "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/NonNormalizedSpec"
          },
          "type": "array"
        },
        "name": {
          "description": "Name of the visualization for later reference.",
          "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 or selections that parameterize a visualization.",
          "items": {
            "$ref": "#/definitions/TopLevelParameter"
          },
          "type": "array"
        },
        "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": [
            {
              "$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": [
        "hconcat"
      ],
      "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/v6.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": "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`"
        },
        "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\"`"
        },
        "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. 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": {
          "description": "Description of this mark for commenting purpose.",
          "type": "string"
        },
        "name": {
          "description": "Name of the visualization for later reference.",
          "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 or selections that parameterize a visualization.",
          "items": {
            "$ref": "#/definitions/TopLevelParameter"
          },
          "type": "array"
        },
        "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": [
            {
              "$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."
        },
        "vconcat": {
          "description": "A list of views to be concatenated and put into a column.",
          "items": {
            "$ref": "#/definitions/NonNormalizedSpec"
          },
          "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/v6.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": "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`"
        },
        "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\"`"
        },
        "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. 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": {
          "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."
        },
        "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."
        },
        "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": {
          "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 or selections that parameterize a visualization.",
          "items": {
            "$ref": "#/definitions/TopLevelParameter"
          },
          "type": "array"
        },
        "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": [
            {
              "$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."
        },
        "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": [
        "layer"
      ],
      "type": "object"
    },
    "TopLevelRepeatSpec": {
      "anyOf": [
        {
          "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/v6.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. 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": [
                {
                  "$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`"
            },
            "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\"`"
            },
            "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"
            },
            "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. 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": {
              "description": "Description of this mark for commenting purpose.",
              "type": "string"
            },
            "name": {
              "description": "Name of the visualization for later reference.",
              "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 or selections that parameterize a visualization.",
              "items": {
                "$ref": "#/definitions/TopLevelParameter"
              },
              "type": "array"
            },
            "repeat": {
              "anyOf": [
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                {
                  "$ref": "#/definitions/RepeatMapping"
                }
              ],
              "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."
            },
            "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)"
            },
            "spec": {
              "$ref": "#/definitions/NonNormalizedSpec",
              "description": "A specification of the view that gets repeated."
            },
            "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": [
            "repeat",
            "spec"
          ],
          "type": "object"
        },
        {
          "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/v6.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. 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": [
                {
                  "$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`"
            },
            "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\"`"
            },
            "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"
            },
            "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. 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": {
              "description": "Description of this mark for commenting purpose.",
              "type": "string"
            },
            "name": {
              "description": "Name of the visualization for later reference.",
              "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 or selections that parameterize a visualization.",
              "items": {
                "$ref": "#/definitions/TopLevelParameter"
              },
              "type": "array"
            },
            "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."
            },
            "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)"
            },
            "spec": {
              "anyOf": [
                {
                  "$ref": "#/definitions/LayerSpec"
                },
                {
                  "$ref": "#/definitions/UnitSpecWithFrame"
                }
              ],
              "description": "A specification of the view that gets repeated."
            },
            "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": [
            "repeat",
            "spec"
          ],
          "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/v6.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. 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": [
            {
              "$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`"
        },
        "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\"`"
        },
        "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"
        },
        "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. 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": {
          "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"
        },
        "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 or selections that parameterize a visualization.",
          "items": {
            "$ref": "#/definitions/TopLevelParameter"
          },
          "type": "array"
        },
        "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. 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/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."
        },
        "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": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "required": [
        "name",
        "select"
      ],
      "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. This is the root class for all Vega-Lite specifications. (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/v6.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. 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": [
            {
              "$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`"
        },
        "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\"`"
        },
        "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`"
        },
        "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. 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": {
          "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.\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"
        },
        "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": "An array of parameters that may either be simple variables, or more complex selections that map user input to data queries.",
          "items": {
            "$ref": "#/definitions/TopLevelParameter"
          },
          "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": {
          "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"
        },
        "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."
        },
        "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": [
        "data",
        "mark"
      ],
      "type": "object"
    },
    "TopoDataFormat": {
      "additionalProperties": false,
      "properties": {
        "feature": {
          "description": "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.",
          "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.",
          "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": "topojson",
          "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"
    },
    "Transform": {
      "anyOf": [
        {
          "$ref": "#/definitions/AggregateTransform"
        },
        {
          "$ref": "#/definitions/BinTransform"
        },
        {
          "$ref": "#/definitions/CalculateTransform"
        },
        {
          "$ref": "#/definitions/DensityTransform"
        },
        {
          "$ref": "#/definitions/ExtentTransform"
        },
        {
          "$ref": "#/definitions/FilterTransform"
        },
        {
          "$ref": "#/definitions/FlattenTransform"
        },
        {
          "$ref": "#/definitions/FoldTransform"
        },
        {
          "$ref": "#/definitions/ImputeTransform"
        },
        {
          "$ref": "#/definitions/JoinAggregateTransform"
        },
        {
          "$ref": "#/definitions/LoessTransform"
        },
        {
          "$ref": "#/definitions/LookupTransform"
        },
        {
          "$ref": "#/definitions/QuantileTransform"
        },
        {
          "$ref": "#/definitions/RegressionTransform"
        },
        {
          "$ref": "#/definitions/TimeUnitTransform"
        },
        {
          "$ref": "#/definitions/SampleTransform"
        },
        {
          "$ref": "#/definitions/StackTransform"
        },
        {
          "$ref": "#/definitions/WindowTransform"
        },
        {
          "$ref": "#/definitions/PivotTransform"
        }
      ]
    },
    "Type": {
      "description": "Data type based on level of measurement",
      "enum": [
        "quantitative",
        "ordinal",
        "temporal",
        "nominal",
        "geojson"
      ],
      "type": "string"
    },
    "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 (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"
            },
            {
              "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."
        },
        "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": [
            {
              "$ref": "#/definitions/TimeUnit"
            },
            {
              "$ref": "#/definitions/BinnedTimeUnit"
            },
            {
              "$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"
    },
    "URI": {
      "format": "uri-reference",
      "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,
      "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.\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."
        },
        "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.\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": [
        "mark"
      ],
      "type": "object"
    },
    "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 to ensure the loaded data is correctly parsed.",
          "type": "string"
        }
      },
      "required": [
        "url"
      ],
      "type": "object"
    },
    "UtcMultiTimeUnit": {
      "enum": [
        "utcyearquarter",
        "utcyearquartermonth",
        "utcyearmonth",
        "utcyearmonthdate",
        "utcyearmonthdatehours",
        "utcyearmonthdatehoursminutes",
        "utcyearmonthdatehoursminutesseconds",
        "utcyearweek",
        "utcyearweekday",
        "utcyearweekdayhours",
        "utcyearweekdayhoursminutes",
        "utcyearweekdayhoursminutesseconds",
        "utcyeardayofyear",
        "utcquartermonth",
        "utcmonthdate",
        "utcmonthdatehours",
        "utcmonthdatehoursminutes",
        "utcmonthdatehoursminutesseconds",
        "utcweekday",
        "utcweekdayhours",
        "utcweekdayhoursminutes",
        "utcweekdayhoursminutesseconds",
        "utcdayhours",
        "utcdayhoursminutes",
        "utcdayhoursminutesseconds",
        "utchoursminutes",
        "utchoursminutesseconds",
        "utcminutesseconds",
        "utcsecondsmilliseconds"
      ],
      "type": "string"
    },
    "UtcSingleTimeUnit": {
      "enum": [
        "utcyear",
        "utcquarter",
        "utcmonth",
        "utcweek",
        "utcday",
        "utcdayofyear",
        "utcdate",
        "utchours",
        "utcminutes",
        "utcseconds",
        "utcmilliseconds"
      ],
      "type": "string"
    },
    "ValueDef<(number|\"width\"|\"height\"|ExprRef)>": {
      "additionalProperties": false,
      "description": "Definition object for a constant value (primitive value or gradient definition) of an encoding channel.",
      "properties": {
        "value": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "const": "width",
              "type": "string"
            },
            {
              "const": "height",
              "type": "string"
            },
            {
              "$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.",
      "properties": {
        "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": [
        "value"
      ],
      "type": "object"
    },
    "ValueDefWithCondition<MarkPropFieldOrDatumDef,(Gradient|string|null)>": {
      "additionalProperties": false,
      "minProperties": 1,
      "properties": {
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
            },
            {
              "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
              },
              "type": "array"
            }
          ],
          "description": "A field definition or one or more value definition(s) with a parameter predicate."
        },
        "value": {
          "anyOf": [
            {
              "$ref": "#/definitions/Gradient"
            },
            {
              "type": "string"
            },
            {
              "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)."
        }
      },
      "type": "object"
    },
    "ValueDefWithCondition<MarkPropFieldOrDatumDef,(string|null)>": {
      "additionalProperties": false,
      "minProperties": 1,
      "properties": {
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
            },
            {
              "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
              },
              "type": "array"
            }
          ],
          "description": "A field definition or one or more value definition(s) with a parameter predicate."
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "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)."
        }
      },
      "type": "object"
    },
    "ValueDefWithCondition<MarkPropFieldOrDatumDef,number>": {
      "additionalProperties": false,
      "minProperties": 1,
      "properties": {
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
            },
            {
              "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
              },
              "type": "array"
            }
          ],
          "description": "A field definition or one or more value definition(s) with a parameter predicate."
        },
        "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)."
        }
      },
      "type": "object"
    },
    "ValueDefWithCondition<MarkPropFieldOrDatumDef,number[]>": {
      "additionalProperties": false,
      "minProperties": 1,
      "properties": {
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef"
            },
            {
              "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
              },
              "type": "array"
            }
          ],
          "description": "A field definition or one or more value definition(s) with a parameter predicate."
        },
        "value": {
          "anyOf": [
            {
              "items": {
                "type": "number"
              },
              "type": "array"
            },
            {
              "$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)."
        }
      },
      "type": "object"
    },
    "ValueDefWithCondition<MarkPropFieldOrDatumDef<TypeForShape>,(string|null)>": {
      "additionalProperties": false,
      "minProperties": 1,
      "properties": {
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalMarkPropFieldOrDatumDef<TypeForShape>"
            },
            {
              "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
              },
              "type": "array"
            }
          ],
          "description": "A field definition or one or more value definition(s) with a parameter predicate."
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "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)."
        }
      },
      "type": "object"
    },
    "ValueDefWithCondition<StringFieldDef,Text>": {
      "additionalProperties": false,
      "minProperties": 1,
      "properties": {
        "condition": {
          "anyOf": [
            {
              "$ref": "#/definitions/ConditionalStringFieldDef"
            },
            {
              "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
            },
            {
              "items": {
                "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
              },
              "type": "array"
            }
          ],
          "description": "A field definition or one or more value definition(s) with a parameter predicate."
        },
        "value": {
          "anyOf": [
            {
              "$ref": "#/definitions/Text"
            },
            {
              "$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)."
        }
      },
      "type": "object"
    },
    "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."
        },
        "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\"."
        },
        "react": {
          "description": "A boolean flag (default `true`) indicating if the update expression should be automatically re-evaluated when any upstream signal dependencies update. If `false`, the update expression will not register any dependencies on other signals, even for initialization.\n\n __Default value:__ `true`",
          "type": "boolean"
        },
        "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>"
      },
      "maxItems": 2,
      "minItems": 2,
      "type": "array"
    },
    "Vector2<boolean>": {
      "items": {
        "type": "boolean"
      },
      "maxItems": 2,
      "minItems": 2,
      "type": "array"
    },
    "Vector2<number>": {
      "items": {
        "type": "number"
      },
      "maxItems": 2,
      "minItems": 2,
      "type": "array"
    },
    "Vector2<string>": {
      "items": {
        "type": "string"
      },
      "maxItems": 2,
      "minItems": 2,
      "type": "array"
    },
    "Vector3<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": {
        "cornerRadius": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cursor": {
          "$ref": "#/definitions/Cursor",
          "description": "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."
        },
        "fill": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "type": "null"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The fill color.\n\n__Default value:__ `undefined`"
        },
        "fillOpacity": {
          "anyOf": [
            {
              "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "opacity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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
        },
        "stroke": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "type": "null"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The stroke color.\n\n__Default value:__ `\"#ddd\"`"
        },
        "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"
            }
          ]
        },
        "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"
            }
          ]
        },
        "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\"` __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"
        },
        "continuousHeight": {
          "description": "The default height when the plot has a continuous y-field for x or latitude, or has arc marks.\n\n__Default value:__ `300`",
          "type": "number"
        },
        "continuousWidth": {
          "description": "The default width when the plot has a continuous field for x or longitude, or has arc marks.\n\n__Default value:__ `300`",
          "type": "number"
        },
        "cornerRadius": {
          "anyOf": [
            {
              "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "cursor": {
          "$ref": "#/definitions/Cursor",
          "description": "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."
        },
        "discreteHeight": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "additionalProperties": false,
              "properties": {
                "step": {
                  "type": "number"
                }
              },
              "required": [
                "step"
              ],
              "type": "object"
            }
          ],
          "description": "The default height when the plot has non arc marks and either a discrete y-field or no y-field. The 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.\n\n__Default value:__ a step size based on `config.view.step`."
        },
        "discreteWidth": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "additionalProperties": false,
              "properties": {
                "step": {
                  "type": "number"
                }
              },
              "required": [
                "step"
              ],
              "type": "object"
            }
          ],
          "description": "The default width when the plot has non-arc marks and either a discrete x-field or no x-field. The 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.\n\n__Default value:__ a step size based on `config.view.step`."
        },
        "fill": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "type": "null"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The fill color.\n\n__Default value:__ `undefined`"
        },
        "fillOpacity": {
          "anyOf": [
            {
              "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
              "maximum": 1,
              "minimum": 0,
              "type": "number"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ]
        },
        "opacity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "$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
        },
        "step": {
          "description": "Default step size for x-/y- discrete fields.",
          "type": "number"
        },
        "stroke": {
          "anyOf": [
            {
              "$ref": "#/definitions/Color"
            },
            {
              "type": "null"
            },
            {
              "$ref": "#/definitions/ExprRef"
            }
          ],
          "description": "The stroke color.\n\n__Default value:__ `\"#ddd\"`"
        },
        "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"
            }
          ]
        },
        "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"
            }
          ]
        }
      },
      "type": "object"
    },
    "WindowEventType": {
      "anyOf": [
        {
          "$ref": "#/definitions/EventType"
        },
        {
          "type": "string"
        }
      ]
    },
    "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"
    }
  }
}

