{
    "$ref": "#/definitions/TopLevelExtendedSpec",
    "$schema": "http://json-schema.org/draft-04/schema#",
    "definitions": {
        "AggregateOp": {
            "enum": [
                "argmax",
                "argmin",
                "average",
                "count",
                "distinct",
                "max",
                "mean",
                "median",
                "min",
                "missing",
                "modeskew",
                "q1",
                "q3",
                "ci0",
                "ci1",
                "stdev",
                "stdevp",
                "sum",
                "valid",
                "values",
                "variance",
                "variancep"
            ],
            "type": "string"
        },
        "AnyMark": {
            "anyOf": [
                {
                    "$ref": "#/definitions/CompositeMark"
                },
                {
                    "$ref": "#/definitions/CompositeMarkDef"
                },
                {
                    "$ref": "#/definitions/Mark"
                },
                {
                    "$ref": "#/definitions/MarkDef"
                }
            ]
        },
        "Axis": {
            "additionalProperties": false,
            "properties": {
                "domain": {
                    "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis (default true).",
                    "type": "boolean"
                },
                "encoding": {
                    "$ref": "#/definitions/AxisEncoding",
                    "description": "Optional mark definitions for custom axis encoding."
                },
                "format": {
                    "description": "The formatting pattern for labels. This is D3's [number format pattern](https://github.com/mbostock/d3/wiki/Formatting) for quantitative fields and D3's [time format pattern](https://github.com/mbostock/d3/wiki/Time-Formatting) for time field.\n\n__Default value:__  derived from [numberFormat](config.html#format) config for quantitative fields and from [timeFormat](config.html#format) config for temporal fields.",
                    "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 (1) quantitative fields that are not binned and (2) time fields;  otherwise, `\"false\"`.",
                    "type": "boolean"
                },
                "labelAngle": {
                    "description": "The rotation angle of the axis labels.\n\n__Default value:__ `-45` for time or ordinal axis and `0` otherwise.",
                    "maximum": 360,
                    "minimum": -360,
                    "type": "number"
                },
                "labelOverlap": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "enum": [
                                "parity"
                            ],
                            "type": "string"
                        },
                        {
                            "enum": [
                                "greedy"
                            ],
                            "type": "string"
                        }
                    ],
                    "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 x-axes with horizontal labels, otherwise `false`."
                },
                "labelPadding": {
                    "description": "The padding, in pixels, between axis and text labels.",
                    "type": "number"
                },
                "labels": {
                    "description": "A boolean flag indicating if labels should be included as part of the axis (default true).\n\n__Default value:__  derived from [axis config](config.html#axis-config)'s `labels` (`true` by default).",
                    "type": "boolean"
                },
                "maxExtent": {
                    "description": "The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles.\n\n__Default value:__ `undefined`.",
                    "type": "number"
                },
                "minExtent": {
                    "description": "The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles.\n\n__Default value:__ `30`",
                    "type": "number"
                },
                "offset": {
                    "description": "The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n\n__Default value:__ derived from  [axis config](config.html#facet-scale-config)'s `offset` (`0` by default)",
                    "type": "number"
                },
                "orient": {
                    "$ref": "#/definitions/AxisOrient",
                    "description": "The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y axis oriented for the right edge of the chart).\n\n__Default value:__ x-axis is placed on the bottom, y-axis is placed on the left, `column`'s x-axis is placed on the top, `row`'s y-axis is placed on the right."
                },
                "position": {
                    "description": "The anchor position of the axis in pixels. For x-axis with top or bottom orientation, this sets the axis group x coordinate. For y-axis with left or right orientation, this sets the axis group y coordinate.\n\n__Default value__: `0`",
                    "type": "number"
                },
                "tickCount": {
                    "description": "A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale's range.",
                    "minimum": 0,
                    "type": "number"
                },
                "tickExtra": {
                    "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPostion\": 1` and an axis `\"padding\"` value of `0`.",
                    "type": "boolean"
                },
                "tickSize": {
                    "description": "The size, in pixels, of major, minor and end ticks.\n\n__Default value:__  derived from [axis config](config.html#axis-config)'s `tickSize` (`6` by default).",
                    "minimum": 0,
                    "type": "number"
                },
                "ticks": {
                    "description": "Boolean value that determines whether the axis should include ticks.",
                    "type": "boolean"
                },
                "title": {
                    "description": "A title for the field.\n\n__Default value:__  derived from the field's name and transformation function applied e.g, \"field_name\", \"SUM(field_name)\", \"BIN(field_name)\", \"YEAR(field_name)\".",
                    "type": "string"
                },
                "titleAlign": {
                    "description": "Horizontal text alignment of axis titles.",
                    "type": "string"
                },
                "titleAngle": {
                    "description": "Angle in degrees of axis titles.",
                    "type": "number"
                },
                "titleMaxLength": {
                    "description": "Max length for axis title if the title is automatically generated from the field's description. By default, this is automatically based on cell size and characterWidth property.\n\n__Default value:__  automatically determined based on the cell size (`config.cell.width`, `config.cell.height`)",
                    "minimum": 0,
                    "type": "number"
                },
                "titlePadding": {
                    "description": "The padding, in pixels, between title and axis.",
                    "type": "number"
                },
                "values": {
                    "anyOf": [
                        {
                            "items": {
                                "type": "number"
                            },
                            "type": "array"
                        },
                        {
                            "items": {
                                "$ref": "#/definitions/DateTime"
                            },
                            "type": "array"
                        }
                    ],
                    "description": "Explicitly set the visible axis tick values."
                },
                "zindex": {
                    "description": "A non-positive integer indicating z-index of the axis.\nIf zindex is 0, axes should be drawn behind all chart elements.\nTo put them in front, use `\"zindex = 1\"`.\n\n__Default value:__ `0` (Behind the marks.)",
                    "minimum": 0,
                    "type": "number"
                }
            },
            "type": "object"
        },
        "AxisConfig": {
            "additionalProperties": false,
            "properties": {
                "bandPosition": {
                    "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.",
                    "type": "number"
                },
                "domain": {
                    "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis (default true).",
                    "type": "boolean"
                },
                "domainColor": {
                    "description": "Color of axis domain line.\n\n__Default value:__  (none, using Vega default).",
                    "type": "string"
                },
                "domainWidth": {
                    "description": "Stroke width of axis domain line\n\n__Default value:__  (none, using Vega default).",
                    "type": "number"
                },
                "grid": {
                    "description": "A boolean flag indicating if grid lines should be included as part of the axis\n\n__Default value:__ `true` for (1) quantitative fields that are not binned and (2) time fields;  otherwise, `\"false\"`.",
                    "type": "boolean"
                },
                "gridColor": {
                    "description": "Color of gridlines.",
                    "type": "string"
                },
                "gridDash": {
                    "description": "The offset (in pixels) into which to begin drawing with the grid dash array.",
                    "items": {
                        "type": "number"
                    },
                    "minimum": 0,
                    "type": "array"
                },
                "gridOpacity": {
                    "description": "The stroke opacity of grid (value between [0,1])\n\n__Default value:__ (`1` by default)",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "gridWidth": {
                    "description": "The grid width, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "labelAngle": {
                    "description": "The rotation angle of the axis labels.\n\n__Default value:__ `-45` for time or ordinal axis and `0` otherwise.",
                    "maximum": 360,
                    "minimum": -360,
                    "type": "number"
                },
                "labelColor": {
                    "description": "The color of the tick label, can be in hex color code or regular color name.",
                    "type": "string"
                },
                "labelFont": {
                    "description": "The font of the tick label.",
                    "type": "string"
                },
                "labelFontSize": {
                    "description": "The font size of the label, in pixels.\n\n__Default value:__ `10`.",
                    "minimum": 0,
                    "type": "number"
                },
                "labelLimit": {
                    "description": "Maximum allowed pixel width of axis tick labels.",
                    "type": "number"
                },
                "labelOverlap": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "enum": [
                                "parity"
                            ],
                            "type": "string"
                        },
                        {
                            "enum": [
                                "greedy"
                            ],
                            "type": "string"
                        }
                    ],
                    "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 x-axes with horizontal labels, otherwise `false`."
                },
                "labelPadding": {
                    "description": "Padding in pixels between axis ticks and tick labels.",
                    "type": "number"
                },
                "labels": {
                    "description": "A boolean flag indicating if labels should be included as part of the axis (default true).\n\n__Default value:__  derived from [axis config](config.html#axis-config)'s `labels` (`true` by default).",
                    "type": "boolean"
                },
                "maxExtent": {
                    "description": "The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles.\n\n__Default value:__ `undefined`.",
                    "type": "number"
                },
                "minExtent": {
                    "description": "The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles.\n\n__Default value:__ `30`",
                    "type": "number"
                },
                "shortTimeLabels": {
                    "description": "Whether month names and weekday names should be abbreviated.\n\n__Default value:__  `false`",
                    "type": "boolean"
                },
                "tickColor": {
                    "description": "The color of the axis's tick.",
                    "type": "string"
                },
                "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 `\"bandPostion\": 1` and an axis `\"padding\"` value of `0`.",
                    "type": "boolean"
                },
                "tickRound": {
                    "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.",
                    "type": "boolean"
                },
                "tickSize": {
                    "description": "The size, in pixels, of major, minor and end ticks.\n\n__Default value:__  derived from [axis config](config.html#axis-config)'s `tickSize` (`6` by default).",
                    "minimum": 0,
                    "type": "number"
                },
                "tickWidth": {
                    "description": "The width, in pixels, of ticks.",
                    "minimum": 0,
                    "type": "number"
                },
                "ticks": {
                    "description": "Boolean value that determines whether the axis should include ticks.",
                    "type": "boolean"
                },
                "titleAlign": {
                    "description": "Horizontal text alignment of axis titles.",
                    "type": "string"
                },
                "titleAngle": {
                    "description": "Angle in degrees of axis titles.",
                    "type": "number"
                },
                "titleBaseline": {
                    "description": "Vertical text baseline for axis titles.",
                    "type": "string"
                },
                "titleColor": {
                    "description": "Color of the title, can be in hex color code or regular color name.",
                    "type": "string"
                },
                "titleFont": {
                    "description": "Font of the title. (e.g., `\"Helvetica Neue\"`).",
                    "type": "string"
                },
                "titleFontSize": {
                    "description": "Font size of the title.\n\n__Default value:__ `10`.",
                    "minimum": 0,
                    "type": "number"
                },
                "titleFontWeight": {
                    "description": "Font weight of the title. (e.g., `\"bold\"`).",
                    "type": [
                        "string",
                        "number"
                    ]
                },
                "titleLimit": {
                    "description": "Maximum allowed pixel width of axis titles.",
                    "type": "number"
                },
                "titleMaxLength": {
                    "description": "Max length for axis title if the title is automatically generated from the field's description. By default, this is automatically based on cell size and characterWidth property.\n\n__Default value:__  automatically determined based on the cell size (`config.cell.width`, `config.cell.height`)",
                    "minimum": 0,
                    "type": "number"
                },
                "titlePadding": {
                    "description": "The padding, in pixels, between title and axis.",
                    "type": "number"
                },
                "titleX": {
                    "description": "X-coordinate of the axis title relative to the axis group.",
                    "type": "number"
                },
                "titleY": {
                    "description": "Y-coordinate of the axis title relative to the axis group.",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "AxisConfigMixins": {
            "additionalProperties": false,
            "properties": {
                "axis": {
                    "$ref": "#/definitions/AxisConfig",
                    "description": "Generic axis config. "
                },
                "axisBand": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Specific axis config for axes with \"band\" scales."
                },
                "axisBottom": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Specific axis config for x-axis along the bottom edge of the chart."
                },
                "axisLeft": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Specific axis config for y-axis along the left edge of the chart."
                },
                "axisRight": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Specific axis config for y-axis along the right edge of the chart."
                },
                "axisTop": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Specific axis config for x-axis along the top edge of the chart."
                },
                "axisX": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "X-axis specific config."
                },
                "axisY": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Y-axis specific config."
                }
            },
            "type": "object"
        },
        "AxisEncoding": {
            "additionalProperties": false,
            "properties": {
                "axis": {
                    "$ref": "#/definitions/GuideEncodingEntry",
                    "description": "Custom encoding for the axis container."
                },
                "domain": {
                    "$ref": "#/definitions/GuideEncodingEntry",
                    "description": "Custom encoding for the axis domain rule mark."
                },
                "grid": {
                    "$ref": "#/definitions/GuideEncodingEntry",
                    "description": "Custom encoding for axis gridline rule marks."
                },
                "labels": {
                    "$ref": "#/definitions/GuideEncodingEntry",
                    "description": "Custom encoding for axis label text marks."
                },
                "ticks": {
                    "$ref": "#/definitions/GuideEncodingEntry",
                    "description": "Custom encoding for axis tick rule marks."
                },
                "title": {
                    "$ref": "#/definitions/GuideEncodingEntry",
                    "description": "Custom encoding for the axis title text mark."
                }
            },
            "type": "object"
        },
        "AxisOrient": {
            "enum": [
                "top",
                "right",
                "left",
                "bottom"
            ],
            "type": "string"
        },
        "BOXPLOT": {
            "enum": [
                "box-plot"
            ],
            "type": "string"
        },
        "BarConfig": {
            "additionalProperties": false,
            "properties": {
                "align": {
                    "$ref": "#/definitions/HorizontalAlign",
                    "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
                },
                "angle": {
                    "description": "The rotation angle of the text, in degrees.",
                    "maximum": 360,
                    "minimum": 0,
                    "type": "number"
                },
                "baseline": {
                    "$ref": "#/definitions/VerticalAlign",
                    "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
                },
                "binSpacing": {
                    "description": "Offset between bar for binned field.  Ideal value for this is either 0 (Preferred by statisticians) or 1 (Vega-Lite Default, D3 example style).\n\n__Default value:__ `1`",
                    "minimum": 0,
                    "type": "number"
                },
                "color": {
                    "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`",
                    "type": "string"
                },
                "continuousBandSize": {
                    "description": "The default size of the bars on continuous scales.\n\n__Default value:__ `2`",
                    "minimum": 0,
                    "type": "number"
                },
                "discreteBandSize": {
                    "description": "The size of the bars.  If unspecified, the default size is  `bandSize-1`,\nwhich provides 1 pixel offset between bars.",
                    "minimum": 0,
                    "type": "number"
                },
                "dx": {
                    "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
                    "type": "number"
                },
                "dy": {
                    "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
                    "type": "number"
                },
                "fill": {
                    "description": "Default Fill Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "fillOpacity": {
                    "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "filled": {
                    "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `true` for all marks except `point` and `false` for `point`.\n\n__Applicable for:__ `bar`, `point`, `circle`, `square`, and `area` marks.",
                    "type": "boolean"
                },
                "font": {
                    "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
                    "minimum": 0,
                    "type": "string"
                },
                "fontSize": {
                    "description": "The font size, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "fontStyle": {
                    "$ref": "#/definitions/FontStyle",
                    "description": "The font style (e.g., `\"italic\"`)."
                },
                "fontWeight": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FontWeight"
                        },
                        {
                            "$ref": "#/definitions/FontWeightNumber"
                        }
                    ],
                    "description": "The font weight (e.g., `\"bold\"`)."
                },
                "interpolate": {
                    "$ref": "#/definitions/Interpolate",
                    "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
                },
                "opacity": {
                    "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "orient": {
                    "$ref": "#/definitions/Orient",
                    "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
                },
                "radius": {
                    "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
                    "minimum": 0,
                    "type": "number"
                },
                "shape": {
                    "description": "The default symbol shape to use. One of: `\"circle\"` (default), `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, or `\"triangle-down\"`, or a custom SVG path.\n\n__Default value:__ `\"circle\"`",
                    "type": "string"
                },
                "size": {
                    "description": "The pixel area each the point/circle/square.\nFor example: in the case of circles, the radius is determined in part by the square root of the size value.\n\n__Default value:__ `30`",
                    "minimum": 0,
                    "type": "number"
                },
                "stroke": {
                    "description": "Default Stroke Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "strokeDash": {
                    "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "strokeDashOffset": {
                    "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
                    "type": "number"
                },
                "strokeOpacity": {
                    "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "strokeWidth": {
                    "description": "The stroke width, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "tension": {
                    "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "text": {
                    "description": "Placeholder text if the `text` channel is not specified",
                    "type": "string"
                },
                "theta": {
                    "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "BaseBin": {
            "additionalProperties": false,
            "properties": {
                "base": {
                    "description": "The number base to use for automatic bin determination (default is base 10).\n\n__Default value:__ `10`",
                    "type": "number"
                },
                "divide": {
                    "description": "Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints.\n\n__Default value:__ `[5, 2]`",
                    "items": {
                        "type": "number"
                    },
                    "minItems": 1,
                    "type": "array"
                },
                "maxbins": {
                    "description": "Maximum number of bins.\n\n__Default value:__ `6` for `row`, `column` and `shape` channels; `10` for other channels",
                    "minimum": 2,
                    "type": "number"
                },
                "minstep": {
                    "description": "A minimum allowable step size (particularly useful for integer values).",
                    "type": "number"
                },
                "nice": {
                    "description": "If true (the default), attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten.",
                    "type": "boolean"
                },
                "step": {
                    "description": "An exact step size to use between bins.\n\n__Note:__ If provided, options such as maxbins will be ignored.",
                    "type": "number"
                },
                "steps": {
                    "description": "An array of allowable step sizes to choose from.",
                    "items": {
                        "type": "number"
                    },
                    "minItems": 1,
                    "type": "array"
                }
            },
            "type": "object"
        },
        "BaseSelectionDef": {
            "additionalProperties": false,
            "properties": {
                "encodings": {
                    "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.",
                    "items": {
                        "$ref": "#/definitions/SingleDefChannel"
                    },
                    "type": "array"
                },
                "fields": {
                    "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "on": {
                    "description": "A Vega event stream (object or selector) that triggers the selection."
                },
                "resolve": {
                    "$ref": "#/definitions/SelectionResolution",
                    "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain. One of: \"global\", \"union\",\n\"intersect\", \"union_others\", or \"intersect_others\".\n\n__global__: Only one instance of the selection exists across all\nviews. When a user interacts within a new view, any previous selections\nare overridden.\n\n__union__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _any_ of these selection\ninstances.\n\n__intersect__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _all_ of these selection\ninstances."
                }
            },
            "type": "object"
        },
        "BaseSpec": {
            "additionalProperties": false,
            "properties": {
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        },
        "Bin": {
            "additionalProperties": false,
            "description": "Binning properties or boolean flag for determining whether to bin data or not.",
            "properties": {
                "base": {
                    "description": "The number base to use for automatic bin determination (default is base 10).\n\n__Default value:__ `10`",
                    "type": "number"
                },
                "divide": {
                    "description": "Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints.\n\n__Default value:__ `[5, 2]`",
                    "items": {
                        "type": "number"
                    },
                    "minItems": 1,
                    "type": "array"
                },
                "extent": {
                    "description": "A two-element (`[min, max]`) array indicating the range of desired bin values.",
                    "items": {
                        "type": "number"
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                },
                "maxbins": {
                    "description": "Maximum number of bins.\n\n__Default value:__ `6` for `row`, `column` and `shape` channels; `10` for other channels",
                    "minimum": 2,
                    "type": "number"
                },
                "minstep": {
                    "description": "A minimum allowable step size (particularly useful for integer values).",
                    "type": "number"
                },
                "nice": {
                    "description": "If true (the default), attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten.",
                    "type": "boolean"
                },
                "step": {
                    "description": "An exact step size to use between bins.\n\n__Note:__ If provided, options such as maxbins will be ignored.",
                    "type": "number"
                },
                "steps": {
                    "description": "An array of allowable step sizes to choose from.",
                    "items": {
                        "type": "number"
                    },
                    "minItems": 1,
                    "type": "array"
                }
            },
            "type": "object"
        },
        "BinTransform": {
            "additionalProperties": false,
            "properties": {
                "as": {
                    "description": "The output fields at which to write the start and end bin values.",
                    "type": "string"
                },
                "bin": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/Bin"
                        },
                        {
                            "enum": [
                                true
                            ],
                            "type": "boolean"
                        }
                    ],
                    "description": "An object indicating bin properties, or simply `true` for using default bin values.."
                },
                "field": {
                    "description": "The data field to bin.",
                    "type": "string"
                }
            },
            "required": [
                "bin",
                "field",
                "as"
            ],
            "type": "object"
        },
        "BoxPlotConfig": {
            "additionalProperties": false,
            "properties": {
                "align": {
                    "$ref": "#/definitions/HorizontalAlign",
                    "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
                },
                "angle": {
                    "description": "The rotation angle of the text, in degrees.",
                    "maximum": 360,
                    "minimum": 0,
                    "type": "number"
                },
                "baseline": {
                    "$ref": "#/definitions/VerticalAlign",
                    "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
                },
                "color": {
                    "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`",
                    "type": "string"
                },
                "dx": {
                    "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
                    "type": "number"
                },
                "dy": {
                    "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
                    "type": "number"
                },
                "fill": {
                    "description": "Default Fill Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "fillOpacity": {
                    "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "filled": {
                    "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `true` for all marks except `point` and `false` for `point`.\n\n__Applicable for:__ `bar`, `point`, `circle`, `square`, and `area` marks.",
                    "type": "boolean"
                },
                "font": {
                    "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
                    "minimum": 0,
                    "type": "string"
                },
                "fontSize": {
                    "description": "The font size, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "fontStyle": {
                    "$ref": "#/definitions/FontStyle",
                    "description": "The font style (e.g., `\"italic\"`)."
                },
                "fontWeight": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FontWeight"
                        },
                        {
                            "$ref": "#/definitions/FontWeightNumber"
                        }
                    ],
                    "description": "The font weight (e.g., `\"bold\"`)."
                },
                "interpolate": {
                    "$ref": "#/definitions/Interpolate",
                    "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
                },
                "opacity": {
                    "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "orient": {
                    "$ref": "#/definitions/Orient",
                    "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
                },
                "radius": {
                    "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
                    "minimum": 0,
                    "type": "number"
                },
                "shape": {
                    "description": "The default symbol shape to use. One of: `\"circle\"` (default), `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, or `\"triangle-down\"`, or a custom SVG path.\n\n__Default value:__ `\"circle\"`",
                    "type": "string"
                },
                "size": {
                    "description": "Size of the box and mid tick of a box plot ",
                    "type": "number"
                },
                "stroke": {
                    "description": "Default Stroke Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "strokeDash": {
                    "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "strokeDashOffset": {
                    "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
                    "type": "number"
                },
                "strokeOpacity": {
                    "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "strokeWidth": {
                    "description": "The stroke width, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "tension": {
                    "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "text": {
                    "description": "Placeholder text if the `text` channel is not specified",
                    "type": "string"
                },
                "theta": {
                    "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "BoxPlotConfigMixins": {
            "additionalProperties": false,
            "properties": {
                "box": {
                    "$ref": "#/definitions/BoxPlotConfig",
                    "description": "Box Config "
                },
                "boxMid": {
                    "$ref": "#/definitions/MarkConfig"
                },
                "boxWhisker": {
                    "$ref": "#/definitions/MarkConfig"
                }
            },
            "type": "object"
        },
        "BoxPlotDef": {
            "additionalProperties": false,
            "properties": {
                "extent": {
                    "anyOf": [
                        {
                            "enum": [
                                "min-max"
                            ],
                            "type": "string"
                        },
                        {
                            "type": "number"
                        }
                    ]
                },
                "orient": {
                    "$ref": "#/definitions/Orient"
                },
                "type": {
                    "$ref": "#/definitions/BOXPLOT"
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "BrushConfig": {
            "additionalProperties": false,
            "properties": {
                "fill": {
                    "description": "The fill color of the interval mark.\n\n__Default value:__ `#333333`",
                    "type": "string"
                },
                "fillOpacity": {
                    "description": "The fill opacity of the interval mark (a value between 0 and 1).\n\n__Default value:__ `0.125`",
                    "type": "number"
                },
                "stroke": {
                    "description": "The stroke color of the interval mark.\n\n__Default value:__ `#ffffff`",
                    "type": "string"
                },
                "strokeDash": {
                    "description": "An array of alternating stroke and space lengths,\nfor creating dashed or dotted lines.",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "strokeDashOffset": {
                    "description": "The offset (in pixels) with which to begin drawing the stroke dash array.",
                    "type": "number"
                },
                "strokeOpacity": {
                    "description": "The stroke opacity of the interval mark (a value between 0 and 1).",
                    "type": "number"
                },
                "strokeWidth": {
                    "description": "The stroke width of the interval mark.",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "CalculateTransform": {
            "additionalProperties": false,
            "properties": {
                "as": {
                    "description": "The field for storing the computed formula value.",
                    "type": "string"
                },
                "calculate": {
                    "description": "A string containing a Vega Expression. Use the variable `datum` to refer to the current data object.",
                    "type": "string"
                }
            },
            "required": [
                "calculate",
                "as"
            ],
            "type": "object"
        },
        "CellConfig": {
            "additionalProperties": false,
            "properties": {
                "clip": {
                    "description": "Whether the view should be clipped.",
                    "type": "boolean"
                },
                "fill": {
                    "description": "The fill color.\n\n__Default value:__ (none)",
                    "type": "string"
                },
                "fillOpacity": {
                    "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ (none)",
                    "type": "number"
                },
                "height": {
                    "description": "The default height of the single plot or each plot in a trellis plot when the visualization has a continuous (non-ordinal) y-scale with `rangeStep` = `null`.\n\n__Default value:__ `200`",
                    "type": "number"
                },
                "stroke": {
                    "description": "The stroke color.\n\n__Default value:__ (none)",
                    "type": "string"
                },
                "strokeDash": {
                    "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.\n\n__Default value:__ (none)",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "strokeDashOffset": {
                    "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.\n\n__Default value:__ (none)",
                    "type": "number"
                },
                "strokeOpacity": {
                    "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ (none)",
                    "type": "number"
                },
                "strokeWidth": {
                    "description": "The stroke width, in pixels.\n\n__Default value:__ (none)",
                    "type": "number"
                },
                "width": {
                    "description": "The default width of the single plot or each plot in a trellis plot when the visualization has a continuous (non-ordinal) x-scale or ordinal x-scale with `rangeStep` = `null`.\n\n__Default value:__ `200`",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "CompositeAggregate": {
            "$ref": "#/definitions/BOXPLOT"
        },
        "CompositeMark": {
            "anyOf": [
                {
                    "$ref": "#/definitions/BOXPLOT"
                },
                {
                    "$ref": "#/definitions/ERRORBAR"
                }
            ]
        },
        "CompositeMarkConfigMixins": {
            "$ref": "#/definitions/BoxPlotConfigMixins"
        },
        "CompositeMarkDef": {
            "$ref": "#/definitions/BoxPlotDef"
        },
        "CompositeUnitSpec": {
            "$ref": "#/definitions/CompositeUnitSpecAlias",
            "description": "Unit spec that can have a composite mark."
        },
        "ConditionLegendFieldDef": {
            "additionalProperties": false,
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "legend": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/Legend"
                        },
                        {
                            "type": "null"
                        }
                    ]
                },
                "scale": {
                    "$ref": "#/definitions/Scale"
                },
                "selection": {
                    "$ref": "#/definitions/SelectionOperand"
                },
                "sort": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/SortField"
                        },
                        {
                            "$ref": "#/definitions/SortOrder"
                        }
                    ],
                    "description": "Sort order for a field with discrete domain.\nThis can be `\"ascending\"`, `\"descending\"`, `null`, or a [sort field definition object](sort.html#sort-field) for sorting by an aggregate calculation of a specified sort field.\n\n__Note:__ For fields with continuous domain, please use `\"scale\": {\"reverse\": true}` to flip the scale instead."
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "selection",
                "type"
            ],
            "type": "object"
        },
        "ConditionTextFieldDef": {
            "additionalProperties": false,
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "format": {
                    "description": "The formatting pattern for text value. If not defined, this will be determined automatically.",
                    "type": "string"
                },
                "selection": {
                    "$ref": "#/definitions/SelectionOperand"
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "selection",
                "type"
            ],
            "type": "object"
        },
        "ConditionTextValueDef": {
            "additionalProperties": false,
            "properties": {
                "selection": {
                    "$ref": "#/definitions/SelectionOperand"
                },
                "value": {
                    "description": "A constant value in visual domain.",
                    "type": [
                        "string",
                        "number",
                        "boolean"
                    ]
                }
            },
            "required": [
                "selection",
                "value"
            ],
            "type": "object"
        },
        "ConditionNumberValueDef": {
            "additionalProperties": false,
            "properties": {
                "selection": {
                    "$ref": "#/definitions/SelectionOperand"
                },
                "value": {
                    "description": "A constant value in visual domain.",
                    "type": "number"
                }
            },
            "required": [
                "selection",
                "value"
            ],
            "type": "object"
        },
        "ConditionStringValueDef": {
            "additionalProperties": false,
            "properties": {
                "selection": {
                    "$ref": "#/definitions/SelectionOperand"
                },
                "value": {
                    "description": "A constant value in visual domain.",
                    "type": "string"
                }
            },
            "required": [
                "selection",
                "value"
            ],
            "type": "object"
        },
        "ConditionOnlyNumberLegendDef": {
            "additionalProperties": false,
            "properties": {
                "condition": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/ConditionLegendFieldDef"
                        },
                        {
                            "$ref": "#/definitions/ConditionNumberValueDef"
                        }
                    ]
                }
            },
            "required": [
                "condition"
            ],
            "type": "object"
        },
        "ConditionOnlyStringLegendDef": {
            "additionalProperties": false,
            "properties": {
                "condition": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/ConditionLegendFieldDef"
                        },
                        {
                            "$ref": "#/definitions/ConditionStringValueDef"
                        }
                    ]
                }
            },
            "required": [
                "condition"
            ],
            "type": "object"
        },
        "ConditionOnlyTextDef": {
            "additionalProperties": false,
            "properties": {
                "condition": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/ConditionTextFieldDef"
                        },
                        {
                            "$ref": "#/definitions/ConditionTextValueDef"
                        }
                    ]
                }
            },
            "required": [
                "condition"
            ],
            "type": "object"
        },
        "ConditionalNumberLegendDef": {
            "anyOf": [
                {
                    "$ref": "#/definitions/ConditionalNumberLegendFieldDef"
                },
                {
                    "$ref": "#/definitions/ConditionalNumberLegendValueDef"
                },
                {
                    "$ref": "#/definitions/ConditionOnlyNumberLegendDef"
                }
            ],
            "description": "Generic type for conditional channelDef.\nF defines the underlying FieldDef type while V defines the underlying ValueDef type."
        },
        "ConditionalStringLegendDef": {
            "anyOf": [
                {
                    "$ref": "#/definitions/ConditionalStringLegendFieldDef"
                },
                {
                    "$ref": "#/definitions/ConditionalStringLegendValueDef"
                },
                {
                    "$ref": "#/definitions/ConditionOnlyStringLegendDef"
                }
            ],
            "description": "Generic type for conditional channelDef.\nF defines the underlying FieldDef type while V defines the underlying ValueDef type."
        },
        "ConditionalTextDef": {
            "anyOf": [
                {
                    "$ref": "#/definitions/ConditionalTextFieldDef"
                },
                {
                    "$ref": "#/definitions/ConditionalTextValueDef"
                },
                {
                    "$ref": "#/definitions/ConditionOnlyTextDef"
                }
            ],
            "description": "Generic type for conditional channelDef.\nF defines the underlying FieldDef type while V defines the underlying ValueDef type."
        },
        "ConditionalNumberLegendFieldDef": {
            "additionalProperties": false,
            "description": "A FieldDef with ConditionValueDef\n{\n   condition: {value: ...},\n   field: ...,\n   ...\n}",
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "condition": {
                    "$ref": "#/definitions/ConditionNumberValueDef"
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "legend": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/Legend"
                        },
                        {
                            "type": "null"
                        }
                    ]
                },
                "scale": {
                    "$ref": "#/definitions/Scale"
                },
                "sort": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/SortField"
                        },
                        {
                            "$ref": "#/definitions/SortOrder"
                        }
                    ],
                    "description": "Sort order for a field with discrete domain.\nThis can be `\"ascending\"`, `\"descending\"`, `null`, or a [sort field definition object](sort.html#sort-field) for sorting by an aggregate calculation of a specified sort field.\n\n__Note:__ For fields with continuous domain, please use `\"scale\": {\"reverse\": true}` to flip the scale instead."
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "ConditionalStringLegendFieldDef": {
            "additionalProperties": false,
            "description": "A FieldDef with ConditionValueDef\n{\n   condition: {value: ...},\n   field: ...,\n   ...\n}",
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "condition": {
                    "$ref": "#/definitions/ConditionStringValueDef"
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "legend": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/Legend"
                        },
                        {
                            "type": "null"
                        }
                    ]
                },
                "scale": {
                    "$ref": "#/definitions/Scale"
                },
                "sort": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/SortField"
                        },
                        {
                            "$ref": "#/definitions/SortOrder"
                        }
                    ],
                    "description": "Sort order for a field with discrete domain.\nThis can be `\"ascending\"`, `\"descending\"`, `null`, or a [sort field definition object](sort.html#sort-field) for sorting by an aggregate calculation of a specified sort field.\n\n__Note:__ For fields with continuous domain, please use `\"scale\": {\"reverse\": true}` to flip the scale instead."
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "ConditionalTextFieldDef": {
            "additionalProperties": false,
            "description": "A FieldDef with ConditionValueDef\n{\n   condition: {value: ...},\n   field: ...,\n   ...\n}",
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "condition": {
                    "$ref": "#/definitions/ConditionTextValueDef"
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "format": {
                    "description": "The formatting pattern for text value. If not defined, this will be determined automatically.",
                    "type": "string"
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "ConditionalNumberLegendValueDef": {
            "additionalProperties": false,
            "description": "A ValueDef with ConditionValueDef | FieldDef\n{\n   condition: {field: ...} | {value: ...},\n   value: ...,\n}",
            "properties": {
                "condition": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/ConditionLegendFieldDef"
                        },
                        {
                            "$ref": "#/definitions/ConditionNumberValueDef"
                        }
                    ]
                },
                "value": {
                    "description": "A constant value in visual domain.",
                    "type": "number"
                }
            },
            "required": [
                "value"
            ],
            "type": "object"
        },
        "ConditionalStringLegendValueDef": {
            "additionalProperties": false,
            "description": "A ValueDef with ConditionValueDef | FieldDef\n{\n   condition: {field: ...} | {value: ...},\n   value: ...,\n}",
            "properties": {
                "condition": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/ConditionLegendFieldDef"
                        },
                        {
                            "$ref": "#/definitions/ConditionStringValueDef"
                        }
                    ]
                },
                "value": {
                    "description": "A constant value in visual domain.",
                    "type": "string"
                }
            },
            "required": [
                "value"
            ],
            "type": "object"
        },
        "ConditionalTextValueDef": {
            "additionalProperties": false,
            "description": "A ValueDef with ConditionValueDef | FieldDef\n{\n   condition: {field: ...} | {value: ...},\n   value: ...,\n}",
            "properties": {
                "condition": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/ConditionTextFieldDef"
                        },
                        {
                            "$ref": "#/definitions/ConditionTextValueDef"
                        }
                    ]
                },
                "value": {
                    "description": "A constant value in visual domain.",
                    "type": [
                        "string",
                        "number",
                        "boolean"
                    ]
                }
            },
            "required": [
                "value"
            ],
            "type": "object"
        },
        "Config": {
            "properties": {
                "area": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Area-Specific Config "
                },
                "autoResize": {
                    "description": "Resize is a boolean indicating if autosize layout should be re-calculated on every update.\n\n__Default value__: `false`",
                    "type": "boolean"
                },
                "axis": {
                    "$ref": "#/definitions/AxisConfig",
                    "description": "Generic axis config. "
                },
                "axisBand": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Specific axis config for axes with \"band\" scales."
                },
                "axisBottom": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Specific axis config for x-axis along the bottom edge of the chart."
                },
                "axisLeft": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Specific axis config for y-axis along the left edge of the chart."
                },
                "axisRight": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Specific axis config for y-axis along the right edge of the chart."
                },
                "axisTop": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Specific axis config for x-axis along the top edge of the chart."
                },
                "axisX": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "X-axis specific config."
                },
                "axisY": {
                    "$ref": "#/definitions/VgAxisConfig",
                    "description": "Y-axis specific config."
                },
                "background": {
                    "description": "CSS color property to use as the background of visualization.\n\n__Default value:__ none (transparent)",
                    "type": "string"
                },
                "bar": {
                    "$ref": "#/definitions/BarConfig",
                    "description": "Bar-Specific Config "
                },
                "cell": {
                    "$ref": "#/definitions/CellConfig",
                    "description": "Cell Config "
                },
                "circle": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Circle-Specific Config "
                },
                "countTitle": {
                    "description": "Default axis and legend title for count fields.\n\n__Default value:__ `'Number of Records'`.",
                    "type": "string"
                },
                "invalidValues": {
                    "description": "Defines how Vega-Lite should handle invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values are filtered.\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
                    "enum": [
                        "filter"
                    ],
                    "type": "string"
                },
                "legend": {
                    "$ref": "#/definitions/LegendConfig",
                    "description": "Legend Config "
                },
                "line": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Line-Specific Config "
                },
                "mark": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Mark Config "
                },
                "numberFormat": {
                    "description": "D3 Number format for axis labels and text tables. For example \"s\" for SI units.(in the form of [D3 number format pattern](https://github.com/mbostock/d3/wiki/Formatting)).\n\n__Default value:__ `\"s\"` (except for text marks that encode a count field, the default value is `\"d\"`).",
                    "type": "string"
                },
                "padding": {
                    "$ref": "#/definitions/Padding",
                    "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
                },
                "point": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Point-Specific Config "
                },
                "range": {
                    "additionalProperties": {
                        "$ref": "#/definitions/RangeConfig"
                    },
                    "description": "Scale range config, or properties defining named range arrays\nthat can be used within scale range definitions\n(such as `{\"type\": \"ordinal\", \"range\": \"category\"}`).\nFor default range that Vega-Lite adopts from Vega, see https://github.com/vega/vega-parser#scale-range-properties.",
                    "type": "object"
                },
                "rect": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Rect-Specific Config "
                },
                "rule": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Rule-Specific Config "
                },
                "scale": {
                    "$ref": "#/definitions/ScaleConfig",
                    "description": "Scale Config "
                },
                "selection": {
                    "$ref": "#/definitions/SelectionConfig",
                    "description": "Selection Config "
                },
                "square": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Square-Specific Config "
                },
                "stack": {
                    "$ref": "#/definitions/StackOffset",
                    "description": "Default stack offset for stackable mark. "
                },
                "text": {
                    "$ref": "#/definitions/TextConfig",
                    "description": "Text-Specific Config "
                },
                "tick": {
                    "$ref": "#/definitions/TickConfig",
                    "description": "Tick-Specific Config "
                },
                "timeFormat": {
                    "description": "Default datetime format for axis and legend labels. The format can be set directly on each axis and legend. [D3 time format pattern](https://github.com/mbostock/d3/wiki/Time-Formatting)).\n\n__Default value:__ `'%b %d, %Y'`.",
                    "type": "string"
                },
                "title": {
                    "$ref": "#/definitions/VgTitleConfig",
                    "description": "Title Config "
                }
            },
            "type": "object"
        },
        "Data": {
            "anyOf": [
                {
                    "$ref": "#/definitions/UrlData"
                },
                {
                    "$ref": "#/definitions/InlineData"
                },
                {
                    "$ref": "#/definitions/NamedData"
                }
            ]
        },
        "DataFormat": {
            "additionalProperties": false,
            "properties": {
                "feature": {
                    "description": "The name of the TopoJSON object set to convert to a GeoJSON feature collection.\nFor example, in a map of the world, there may be an object set named `\"countries\"`.\nUsing the feature property, we can extract this set and generate a GeoJSON feature object for each country.",
                    "type": "string"
                },
                "mesh": {
                    "description": "The name of the TopoJSON object set to convert to mesh.\nSimilar to the `feature` option, `mesh` extracts a named TopoJSON object set.\n  Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features.\nExtracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.",
                    "type": "string"
                },
                "parse": {
                    "anyOf": [
                        {
                            "enum": [
                                "auto"
                            ],
                            "type": "string"
                        },
                        {
                            "type": "object"
                        }
                    ],
                    "description": "If set to auto (the default), perform automatic type inference to determine the desired data types.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"` or `\"date\"`).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: 'date:\"%m%d%Y\"'}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: 'utc:\"%m%d%Y\"'}`). See more about [UTC time](timeunit.html#utc)"
                },
                "property": {
                    "description": "The JSON property containing the desired data.\nThis parameter can be used when the loaded JSON file may have surrounding structure or meta-data.\nFor example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features`\nfrom the loaded JSON object.",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "DataFormatType": {
            "enum": [
                "json",
                "csv",
                "tsv",
                "topojson"
            ],
            "type": "string"
        },
        "DataUrlFormat": {
            "additionalProperties": false,
            "properties": {
                "feature": {
                    "description": "The name of the TopoJSON object set to convert to a GeoJSON feature collection.\nFor example, in a map of the world, there may be an object set named `\"countries\"`.\nUsing the feature property, we can extract this set and generate a GeoJSON feature object for each country.",
                    "type": "string"
                },
                "mesh": {
                    "description": "The name of the TopoJSON object set to convert to mesh.\nSimilar to the `feature` option, `mesh` extracts a named TopoJSON object set.\n  Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features.\nExtracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.",
                    "type": "string"
                },
                "parse": {
                    "anyOf": [
                        {
                            "enum": [
                                "auto"
                            ],
                            "type": "string"
                        },
                        {
                            "type": "object"
                        }
                    ],
                    "description": "If set to auto (the default), perform automatic type inference to determine the desired data types.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"` or `\"date\"`).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: 'date:\"%m%d%Y\"'}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: 'utc:\"%m%d%Y\"'}`). See more about [UTC time](timeunit.html#utc)"
                },
                "property": {
                    "description": "The JSON property containing the desired data.\nThis parameter can be used when the loaded JSON file may have surrounding structure or meta-data.\nFor example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features`\nfrom the loaded JSON object.",
                    "type": "string"
                },
                "type": {
                    "$ref": "#/definitions/DataFormatType",
                    "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`.\nThe default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default."
                }
            },
            "type": "object"
        },
        "DateTime": {
            "additionalProperties": false,
            "description": "Object for defining datetime in Vega-Lite Filter.\nIf both month and quarter are provided, month has higher precedence.\n`day` cannot be combined with other date.\nWe accept string for month and day names.",
            "properties": {
                "date": {
                    "description": "Integer value representing the date from 1-31.",
                    "maximum": 31,
                    "minimum": 1,
                    "type": "number"
                },
                "day": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/Day"
                        },
                        {
                            "type": "string"
                        }
                    ],
                    "description": "Value representing the day of a week.  This can be one of: (1) integer value -- `1` represents Monday; (2) case-insensitive day name (e.g., `\"Monday\"`);  (3) case-insensitive, 3-character short day name (e.g., `\"Mon\"`).   <br/> **Warning:** A DateTime definition object with `day`** should not be combined with `year`, `quarter`, `month`, or `date`."
                },
                "hours": {
                    "description": "Integer value representing the hour of a day from 0-23.",
                    "maximum": 23,
                    "minimum": 0,
                    "type": "number"
                },
                "milliseconds": {
                    "description": "Integer value representing the millisecond segment of time.",
                    "maximum": 999,
                    "minimum": 0,
                    "type": "number"
                },
                "minutes": {
                    "description": "Integer value representing the minute segment of time from 0-59.",
                    "maximum": 59,
                    "minimum": 0,
                    "type": "number"
                },
                "month": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/Month"
                        },
                        {
                            "type": "string"
                        }
                    ],
                    "description": "One of: (1) integer value representing the month from `1`-`12`. `1` represents January;  (2) case-insensitive month name (e.g., `\"January\"`);  (3) case-insensitive, 3-character short month name (e.g., `\"Jan\"`). "
                },
                "quarter": {
                    "description": "Integer value representing the quarter of the year (from 1-4).",
                    "maximum": 4,
                    "minimum": 1,
                    "type": "number"
                },
                "seconds": {
                    "description": "Integer value representing the second segment (0-59) of a time value",
                    "maximum": 59,
                    "minimum": 0,
                    "type": "number"
                },
                "utc": {
                    "description": "A boolean flag indicating if date time is in utc time. If false, the date time is in local time",
                    "type": "boolean"
                },
                "year": {
                    "description": "Integer value representing the year.",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "Day": {
            "maximum": 7,
            "minimum": 1,
            "type": "number"
        },
        "Domain": {
            "anyOf": [
                {
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                {
                    "items": {
                        "$ref": "#/definitions/DateTime"
                    },
                    "type": "array"
                },
                {
                    "enum": [
                        "unaggregated"
                    ],
                    "type": "string"
                },
                {
                    "$ref": "#/definitions/SelectionDomain"
                }
            ]
        },
        "ERRORBAR": {
            "enum": [
                "error-bar"
            ],
            "type": "string"
        },
        "Encoding": {
            "additionalProperties": false,
            "properties": {
                "color": {
                    "$ref": "#/definitions/ConditionalStringLegendDef",
                    "description": "Color of the marks \u2013 either fill or stroke color based on mark type.\n(By default, fill color for `area`, `bar`, `tick`, `text`, `circle`, and `square` /\nstroke color for `line` and `point`.)"
                },
                "detail": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FieldDef"
                        },
                        {
                            "items": {
                                "$ref": "#/definitions/FieldDef"
                            },
                            "type": "array"
                        }
                    ],
                    "description": "Additional levels of detail for grouping data in aggregate views and\nin line and area marks without mapping data to a specific visual channel."
                },
                "opacity": {
                    "$ref": "#/definitions/ConditionalNumberLegendDef",
                    "description": "Opacity of the marks \u2013 either can be a value or a range."
                },
                "order": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/OrderFieldDef"
                        },
                        {
                            "items": {
                                "$ref": "#/definitions/OrderFieldDef"
                            },
                            "type": "array"
                        }
                    ],
                    "description": "stack order for stacked marks or order of data points in line marks."
                },
                "shape": {
                    "$ref": "#/definitions/ConditionalStringLegendDef",
                    "description": "The symbol's shape (only for `point` marks). The supported values are\n`\"circle\"` (default), `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`,\nor `\"triangle-down\"`, or else a custom SVG path string."
                },
                "size": {
                    "$ref": "#/definitions/ConditionalNumberLegendDef",
                    "description": "Size of the mark.\n- For `point`, `square` and `circle`\n\u2013 the symbol size, or pixel area of the mark.\n- For `bar` and `tick` \u2013 the bar and tick's size.\n- For `text` \u2013 the text's font size.\n- Size is currently unsupported for `line` and `area`."
                },
                "text": {
                    "$ref": "#/definitions/ConditionalTextDef",
                    "description": "Text of the `text` mark."
                },
                "tooltip": {
                    "$ref": "#/definitions/ConditionalTextDef",
                    "description": "The tooltip text to show upon mouse hover."
                },
                "x": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/PositionFieldDef"
                        },
                        {
                            "$ref": "#/definitions/NumberValueDef"
                        }
                    ],
                    "description": "X coordinates for `point`, `circle`, `square`,\n`line`, `rule`, `text`, and `tick`\n(or to width and height for `bar` and `area` marks)."
                },
                "x2": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FieldDef"
                        },
                        {
                            "$ref": "#/definitions/NumberValueDef"
                        }
                    ],
                    "description": "X2 coordinates for ranged `bar`, `rule`, `area`."
                },
                "y": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/PositionFieldDef"
                        },
                        {
                            "$ref": "#/definitions/NumberValueDef"
                        }
                    ],
                    "description": "Y coordinates for `point`, `circle`, `square`,\n`line`, `rule`, `text`, and `tick`\n(or to width and height for `bar` and `area` marks)."
                },
                "y2": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FieldDef"
                        },
                        {
                            "$ref": "#/definitions/NumberValueDef"
                        }
                    ],
                    "description": "Y2 coordinates for ranged `bar`, `rule`, `area`."
                }
            },
            "type": "object"
        },
        "EncodingWithFacet": {
            "additionalProperties": false,
            "properties": {
                "color": {
                    "$ref": "#/definitions/ConditionalStringLegendDef",
                    "description": "Color of the marks \u2013 either fill or stroke color based on mark type.\n(By default, fill color for `area`, `bar`, `tick`, `text`, `circle`, and `square` /\nstroke color for `line` and `point`.)"
                },
                "column": {
                    "$ref": "#/definitions/FacetFieldDef",
                    "description": "Horizontal facets for trellis plots."
                },
                "detail": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FieldDef"
                        },
                        {
                            "items": {
                                "$ref": "#/definitions/FieldDef"
                            },
                            "type": "array"
                        }
                    ],
                    "description": "Additional levels of detail for grouping data in aggregate views and\nin line and area marks without mapping data to a specific visual channel."
                },
                "opacity": {
                    "$ref": "#/definitions/ConditionalNumberLegendDef",
                    "description": "Opacity of the marks \u2013 either can be a value or a range."
                },
                "order": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/OrderFieldDef"
                        },
                        {
                            "items": {
                                "$ref": "#/definitions/OrderFieldDef"
                            },
                            "type": "array"
                        }
                    ],
                    "description": "stack order for stacked marks or order of data points in line marks."
                },
                "row": {
                    "$ref": "#/definitions/FacetFieldDef",
                    "description": "Vertical facets for trellis plots."
                },
                "shape": {
                    "$ref": "#/definitions/ConditionalStringLegendDef",
                    "description": "The symbol's shape (only for `point` marks). The supported values are\n`\"circle\"` (default), `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`,\nor `\"triangle-down\"`, or else a custom SVG path string."
                },
                "size": {
                    "$ref": "#/definitions/ConditionalNumberLegendDef",
                    "description": "Size of the mark.\n- For `point`, `square` and `circle`\n\u2013 the symbol size, or pixel area of the mark.\n- For `bar` and `tick` \u2013 the bar and tick's size.\n- For `text` \u2013 the text's font size.\n- Size is currently unsupported for `line` and `area`."
                },
                "text": {
                    "$ref": "#/definitions/ConditionalTextDef",
                    "description": "Text of the `text` mark."
                },
                "tooltip": {
                    "$ref": "#/definitions/ConditionalTextDef",
                    "description": "The tooltip text to show upon mouse hover."
                },
                "x": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/PositionFieldDef"
                        },
                        {
                            "$ref": "#/definitions/NumberValueDef"
                        }
                    ],
                    "description": "X coordinates for `point`, `circle`, `square`,\n`line`, `rule`, `text`, and `tick`\n(or to width and height for `bar` and `area` marks)."
                },
                "x2": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FieldDef"
                        },
                        {
                            "$ref": "#/definitions/NumberValueDef"
                        }
                    ],
                    "description": "X2 coordinates for ranged `bar`, `rule`, `area`."
                },
                "y": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/PositionFieldDef"
                        },
                        {
                            "$ref": "#/definitions/NumberValueDef"
                        }
                    ],
                    "description": "Y coordinates for `point`, `circle`, `square`,\n`line`, `rule`, `text`, and `tick`\n(or to width and height for `bar` and `area` marks)."
                },
                "y2": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FieldDef"
                        },
                        {
                            "$ref": "#/definitions/NumberValueDef"
                        }
                    ],
                    "description": "Y2 coordinates for ranged `bar`, `rule`, `area`."
                }
            },
            "type": "object"
        },
        "EqualFilter": {
            "additionalProperties": false,
            "properties": {
                "equal": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "number"
                        },
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/DateTime"
                        }
                    ],
                    "description": "The value that the field should be equal to."
                },
                "field": {
                    "description": "Field to be filtered.",
                    "type": "string"
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for the field to be filtered."
                }
            },
            "required": [
                "field",
                "equal"
            ],
            "type": "object"
        },
        "ExtendedScheme": {
            "additionalProperties": false,
            "properties": {
                "count": {
                    "type": "number"
                },
                "extent": {
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "name": {
                    "description": "Color scheme that determines output color of an ordinal/sequential color scale.",
                    "type": "string"
                }
            },
            "required": [
                "name"
            ],
            "type": "object"
        },
        "Facet": {
            "additionalProperties": false,
            "properties": {
                "column": {
                    "$ref": "#/definitions/FacetFieldDef",
                    "description": "Horizontal facets for trellis plots."
                },
                "row": {
                    "$ref": "#/definitions/FacetFieldDef",
                    "description": "Vertical facets for trellis plots."
                }
            },
            "type": "object"
        },
        "FacetFieldDef": {
            "additionalProperties": false,
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "header": {
                    "$ref": "#/definitions/Header"
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "FacetedUnitSpec": {
            "$ref": "#/definitions/FacetedCompositeUnitSpecAlias",
            "description": "Unit spec that can have a composite mark and row or column channels."
        },
        "Field": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "$ref": "#/definitions/RepeatRef"
                }
            ]
        },
        "FieldDef": {
            "additionalProperties": false,
            "description": "Definition object for a data field, its type and transformation of an encoding channel.",
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "FieldDefBase": {
            "additionalProperties": false,
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                }
            },
            "type": "object"
        },
        "Filter": {
            "anyOf": [
                {
                    "$ref": "#/definitions/EqualFilter"
                },
                {
                    "$ref": "#/definitions/RangeFilter"
                },
                {
                    "$ref": "#/definitions/OneOfFilter"
                },
                {
                    "$ref": "#/definitions/SelectionFilter"
                },
                {
                    "type": "string"
                }
            ]
        },
        "FilterTransform": {
            "additionalProperties": false,
            "properties": {
                "filter": {
                    "$ref": "#/definitions/FilterOperand",
                    "description": "A string containing the filter Vega expression. Use `datum` to refer to the current data object."
                }
            },
            "required": [
                "filter"
            ],
            "type": "object"
        },
        "FontStyle": {
            "enum": [
                "normal",
                "italic"
            ],
            "type": "string"
        },
        "FontWeight": {
            "enum": [
                "normal",
                "bold"
            ],
            "type": "string"
        },
        "FontWeightNumber": {
            "maximum": 900,
            "minimum": 100,
            "type": "number"
        },
        "FacetedSpec": {
            "additionalProperties": false,
            "properties": {
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "facet": {
                    "$ref": "#/definitions/Facet"
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "resolve": {
                    "$ref": "#/definitions/ResolveMapping"
                },
                "spec": {
                    "$ref": "#/definitions/Spec"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                }
            },
            "required": [
                "facet",
                "spec"
            ],
            "type": "object"
        },
        "HConcatSpec": {
            "additionalProperties": false,
            "properties": {
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "hconcat": {
                    "items": {
                        "$ref": "#/definitions/Spec"
                    },
                    "type": "array"
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "resolve": {
                    "$ref": "#/definitions/ResolveMapping"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                }
            },
            "required": [
                "hconcat"
            ],
            "type": "object"
        },
        "LayerSpec": {
            "additionalProperties": false,
            "properties": {
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "height": {
                    "description": "The height of a visualization.\n\n__Default value:__\n- For y-axis with a continuous (non-ordinal) scale, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- For y-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the height is determined by the value of `rangeStep` and the cardinality of the field mapped to y-channel.   Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plot with `row` and `column` channels, this represents the height of a single cell.",
                    "type": "number"
                },
                "layer": {
                    "description": "Unit specs that will be layered.",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/LayerSpec"
                            },
                            {
                                "$ref": "#/definitions/CompositeUnitSpec"
                            }
                        ]
                    },
                    "type": "array"
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "resolve": {
                    "$ref": "#/definitions/ResolveMapping"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                },
                "width": {
                    "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- For x-axis with a continuous (non-ordinal) scale, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- For x-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the width is determined by the value of `rangeStep` and the cardinality of the field mapped to x-channel.   Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note__: For plot with `row` and `column` channels, this represents the width of a single cell.",
                    "type": "number"
                }
            },
            "required": [
                "layer"
            ],
            "type": "object"
        },
        "RepeatSpec": {
            "additionalProperties": false,
            "properties": {
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "repeat": {
                    "$ref": "#/definitions/Repeat"
                },
                "resolve": {
                    "$ref": "#/definitions/ResolveMapping"
                },
                "spec": {
                    "$ref": "#/definitions/Spec"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                }
            },
            "required": [
                "repeat",
                "spec"
            ],
            "type": "object"
        },
        "Spec": {
            "anyOf": [
                {
                    "$ref": "#/definitions/CompositeUnitSpec"
                },
                {
                    "$ref": "#/definitions/LayerSpec"
                },
                {
                    "$ref": "#/definitions/FacetedSpec"
                },
                {
                    "$ref": "#/definitions/RepeatSpec"
                },
                {
                    "$ref": "#/definitions/VConcatSpec"
                },
                {
                    "$ref": "#/definitions/HConcatSpec"
                }
            ]
        },
        "CompositeUnitSpecAlias": {
            "additionalProperties": false,
            "properties": {
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "encoding": {
                    "$ref": "#/definitions/Encoding",
                    "description": "A key-value mapping between encoding channels and definition of fields."
                },
                "height": {
                    "description": "The height of a visualization.\n\n__Default value:__\n- For y-axis with a continuous (non-ordinal) scale, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- For y-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the height is determined by the value of `rangeStep` and the cardinality of the field mapped to y-channel.   Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plot with `row` and `column` channels, this represents the height of a single cell.",
                    "type": "number"
                },
                "mark": {
                    "$ref": "#/definitions/AnyMark",
                    "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, and `\"text\"`) or a [mark definition object](mark.html#mark-def)."
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "selection": {
                    "additionalProperties": {
                        "$ref": "#/definitions/SelectionDef"
                    },
                    "description": "A key-value mapping between selection names and definitions.",
                    "type": "object"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                },
                "width": {
                    "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- For x-axis with a continuous (non-ordinal) scale, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- For x-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the width is determined by the value of `rangeStep` and the cardinality of the field mapped to x-channel.   Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note__: For plot with `row` and `column` channels, this represents the width of a single cell.",
                    "type": "number"
                }
            },
            "required": [
                "mark",
                "encoding"
            ],
            "type": "object"
        },
        "FacetedCompositeUnitSpecAlias": {
            "additionalProperties": false,
            "properties": {
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "encoding": {
                    "$ref": "#/definitions/EncodingWithFacet",
                    "description": "A key-value mapping between encoding channels and definition of fields."
                },
                "height": {
                    "description": "The height of a visualization.\n\n__Default value:__\n- For y-axis with a continuous (non-ordinal) scale, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- For y-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the height is determined by the value of `rangeStep` and the cardinality of the field mapped to y-channel.   Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plot with `row` and `column` channels, this represents the height of a single cell.",
                    "type": "number"
                },
                "mark": {
                    "$ref": "#/definitions/AnyMark",
                    "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, and `\"text\"`) or a [mark definition object](mark.html#mark-def)."
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "selection": {
                    "additionalProperties": {
                        "$ref": "#/definitions/SelectionDef"
                    },
                    "description": "A key-value mapping between selection names and definitions.",
                    "type": "object"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                },
                "width": {
                    "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- For x-axis with a continuous (non-ordinal) scale, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- For x-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the width is determined by the value of `rangeStep` and the cardinality of the field mapped to x-channel.   Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note__: For plot with `row` and `column` channels, this represents the width of a single cell.",
                    "type": "number"
                }
            },
            "required": [
                "mark",
                "encoding"
            ],
            "type": "object"
        },
        "VConcatSpec": {
            "additionalProperties": false,
            "properties": {
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "resolve": {
                    "$ref": "#/definitions/ResolveMapping"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                },
                "vconcat": {
                    "items": {
                        "$ref": "#/definitions/Spec"
                    },
                    "type": "array"
                }
            },
            "required": [
                "vconcat"
            ],
            "type": "object"
        },
        "Guide": {
            "additionalProperties": false,
            "properties": {
                "format": {
                    "description": "The formatting pattern for labels. This is D3's [number format pattern](https://github.com/mbostock/d3/wiki/Formatting) for quantitative fields and D3's [time format pattern](https://github.com/mbostock/d3/wiki/Time-Formatting) for time field.\n\n__Default value:__  derived from [numberFormat](config.html#format) config for quantitative fields and from [timeFormat](config.html#format) config for temporal fields.",
                    "type": "string"
                },
                "title": {
                    "description": "A title for the field.\n\n__Default value:__  derived from the field's name and transformation function applied e.g, \"field_name\", \"SUM(field_name)\", \"BIN(field_name)\", \"YEAR(field_name)\".",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "GuideEncodingEntry": {
            "additionalProperties": false,
            "properties": {
                "align": {
                    "$ref": "#/definitions/ValueDef"
                },
                "angle": {
                    "$ref": "#/definitions/ValueDef"
                },
                "baseline": {
                    "$ref": "#/definitions/ValueDef"
                },
                "clip": {
                    "$ref": "#/definitions/ValueDef"
                },
                "cursor": {
                    "$ref": "#/definitions/ValueDef"
                },
                "dir": {
                    "$ref": "#/definitions/ValueDef"
                },
                "dx": {
                    "$ref": "#/definitions/ValueDef"
                },
                "dy": {
                    "$ref": "#/definitions/ValueDef"
                },
                "ellipsis": {
                    "$ref": "#/definitions/ValueDef"
                },
                "endAngle": {
                    "$ref": "#/definitions/ValueDef"
                },
                "fill": {
                    "$ref": "#/definitions/ValueDef"
                },
                "fillOpacity": {
                    "$ref": "#/definitions/ValueDef"
                },
                "font": {
                    "$ref": "#/definitions/ValueDef"
                },
                "fontSize": {
                    "$ref": "#/definitions/ValueDef"
                },
                "fontStyle": {
                    "$ref": "#/definitions/ValueDef"
                },
                "fontWeight": {
                    "$ref": "#/definitions/ValueDef"
                },
                "height": {
                    "$ref": "#/definitions/ValueDef"
                },
                "innerRadius": {
                    "$ref": "#/definitions/ValueDef"
                },
                "interpolate": {
                    "$ref": "#/definitions/ValueDef"
                },
                "limit": {
                    "$ref": "#/definitions/ValueDef"
                },
                "opacity": {
                    "$ref": "#/definitions/ValueDef"
                },
                "orient": {
                    "$ref": "#/definitions/ValueDef"
                },
                "outerRadius": {
                    "$ref": "#/definitions/ValueDef"
                },
                "path": {
                    "$ref": "#/definitions/ValueDef"
                },
                "radius": {
                    "$ref": "#/definitions/ValueDef"
                },
                "shape": {
                    "$ref": "#/definitions/ValueDef"
                },
                "size": {
                    "$ref": "#/definitions/ValueDef"
                },
                "startAngle": {
                    "$ref": "#/definitions/ValueDef"
                },
                "stroke": {
                    "$ref": "#/definitions/ValueDef"
                },
                "strokeDash": {
                    "$ref": "#/definitions/ValueDef"
                },
                "strokeDashOffset": {
                    "$ref": "#/definitions/ValueDef"
                },
                "strokeOpacity": {
                    "$ref": "#/definitions/ValueDef"
                },
                "strokeWidth": {
                    "$ref": "#/definitions/ValueDef"
                },
                "tension": {
                    "$ref": "#/definitions/ValueDef"
                },
                "text": {
                    "$ref": "#/definitions/ValueDef"
                },
                "theta": {
                    "$ref": "#/definitions/ValueDef"
                },
                "url": {
                    "$ref": "#/definitions/ValueDef"
                },
                "width": {
                    "$ref": "#/definitions/ValueDef"
                },
                "x": {
                    "$ref": "#/definitions/ValueDef"
                },
                "x2": {
                    "$ref": "#/definitions/ValueDef"
                },
                "xc": {
                    "$ref": "#/definitions/ValueDef"
                },
                "y": {
                    "$ref": "#/definitions/ValueDef"
                },
                "y2": {
                    "$ref": "#/definitions/ValueDef"
                },
                "yc": {
                    "$ref": "#/definitions/ValueDef"
                }
            },
            "type": "object"
        },
        "Header": {
            "additionalProperties": false,
            "description": "Headers of row / column channels for faceted plots.",
            "properties": {
                "format": {
                    "description": "The formatting pattern for axis labels. This is D3's [number format pattern](https://github.com/mbostock/d3/wiki/Formatting) for quantitative axis and D3's [time format pattern](https://github.com/mbostock/d3/wiki/Time-Formatting) for time axis.\n\n__Default value:__  derived from [numberFormat](config.html#format) config for quantitative axis and from [timeFormat](config.html#format) config for time axis.",
                    "type": "string"
                },
                "sort": {
                    "$ref": "#/definitions/SortOrder"
                },
                "title": {
                    "description": "A title for the axis. Shows field name and its function by default.\n\n__Default value:__  derived from the field's name and transformation function applied e.g, \"field_name\", \"SUM(field_name)\", \"BIN(field_name)\", \"YEAR(field_name)\".",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "HorizontalAlign": {
            "enum": [
                "left",
                "right",
                "center"
            ],
            "type": "string"
        },
        "InlineData": {
            "additionalProperties": false,
            "properties": {
                "format": {
                    "$ref": "#/definitions/DataFormat",
                    "description": "Data format properties"
                },
                "values": {
                    "description": "Pass array of objects instead of a url to a file.",
                    "items": {},
                    "type": "array"
                }
            },
            "required": [
                "values"
            ],
            "type": "object"
        },
        "Interpolate": {
            "enum": [
                "linear",
                "linear-closed",
                "step",
                "step-before",
                "step-after",
                "basis",
                "basis-open",
                "basis-closed",
                "cardinal",
                "cardinal-open",
                "cardinal-closed",
                "bundle",
                "monotone"
            ],
            "type": "string"
        },
        "IntervalSelection": {
            "additionalProperties": false,
            "properties": {
                "bind": {
                    "description": "Establishes a two-way binding between the interval selection and the scales\nused within the same view. This allows a user to interactively pan and\nzoom the view.",
                    "enum": [
                        "scales"
                    ],
                    "type": "string"
                },
                "encodings": {
                    "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.",
                    "items": {
                        "$ref": "#/definitions/SingleDefChannel"
                    },
                    "type": "array"
                },
                "fields": {
                    "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "mark": {
                    "$ref": "#/definitions/BrushConfig",
                    "description": "Each (unbound) interval selection also adds a rectangle mark to depict the\nextents of the interval. The `mark` property can be used to customize the\nappearance of the mark."
                },
                "on": {
                    "description": "A Vega event stream (object or selector) that triggers the selection."
                },
                "resolve": {
                    "$ref": "#/definitions/SelectionResolution",
                    "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain. One of: \"global\", \"union\",\n\"intersect\", \"union_others\", or \"intersect_others\".\n\n__global__: Only one instance of the selection exists across all\nviews. When a user interacts within a new view, any previous selections\nare overridden.\n\n__union__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _any_ of these selection\ninstances.\n\n__intersect__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _all_ of these selection\ninstances."
                },
                "translate": {
                    "description": "When truthy, allows a user to interactively move an interval selection\nback-and-forth. Can be `true`, `false` (to disable panning), or a\n[Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\nwhich must include a start and end event to trigger continuous panning.\n\n__Default value:__ `true`, which corresponds to\n`[mousedown, window:mouseup] > window:mousemove!` which corresponds to\nclicks and dragging within an interval selection to reposition it.",
                    "type": [
                        "string",
                        "boolean"
                    ]
                },
                "type": {
                    "enum": [
                        "interval"
                    ],
                    "type": "string"
                },
                "zoom": {
                    "description": "When truthy, allows a user to interactively resize an interval selection.\nCan be `true`, `false` (to disable zooming), or a [Vega event stream\ndefinition](https://vega.github.io/vega/docs/event-streams/). Currently,\nonly `wheel` events are supported.\n\n\n__Default value:__ `true`, which corresponds to `wheel!`.",
                    "type": [
                        "string",
                        "boolean"
                    ]
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "IntervalSelectionConfig": {
            "additionalProperties": false,
            "properties": {
                "bind": {
                    "description": "Establishes a two-way binding between the interval selection and the scales\nused within the same view. This allows a user to interactively pan and\nzoom the view.",
                    "enum": [
                        "scales"
                    ],
                    "type": "string"
                },
                "encodings": {
                    "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.",
                    "items": {
                        "$ref": "#/definitions/SingleDefChannel"
                    },
                    "type": "array"
                },
                "fields": {
                    "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "mark": {
                    "$ref": "#/definitions/BrushConfig",
                    "description": "Each (unbound) interval selection also adds a rectangle mark to depict the\nextents of the interval. The `mark` property can be used to customize the\nappearance of the mark."
                },
                "on": {
                    "description": "A Vega event stream (object or selector) that triggers the selection."
                },
                "resolve": {
                    "$ref": "#/definitions/SelectionResolution",
                    "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain. One of: \"global\", \"union\",\n\"intersect\", \"union_others\", or \"intersect_others\".\n\n__global__: Only one instance of the selection exists across all\nviews. When a user interacts within a new view, any previous selections\nare overridden.\n\n__union__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _any_ of these selection\ninstances.\n\n__intersect__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _all_ of these selection\ninstances."
                },
                "translate": {
                    "description": "When truthy, allows a user to interactively move an interval selection\nback-and-forth. Can be `true`, `false` (to disable panning), or a\n[Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\nwhich must include a start and end event to trigger continuous panning.\n\n__Default value:__ `true`, which corresponds to\n`[mousedown, window:mouseup] > window:mousemove!` which corresponds to\nclicks and dragging within an interval selection to reposition it.",
                    "type": [
                        "string",
                        "boolean"
                    ]
                },
                "zoom": {
                    "description": "When truthy, allows a user to interactively resize an interval selection.\nCan be `true`, `false` (to disable zooming), or a [Vega event stream\ndefinition](https://vega.github.io/vega/docs/event-streams/). Currently,\nonly `wheel` events are supported.\n\n\n__Default value:__ `true`, which corresponds to `wheel!`.",
                    "type": [
                        "string",
                        "boolean"
                    ]
                }
            },
            "type": "object"
        },
        "LayoutSizeMixins": {
            "additionalProperties": false,
            "properties": {
                "height": {
                    "description": "The height of a visualization.\n\n__Default value:__\n- For y-axis with a continuous (non-ordinal) scale, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- For y-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the height is determined by the value of `rangeStep` and the cardinality of the field mapped to y-channel.   Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plot with `row` and `column` channels, this represents the height of a single cell.",
                    "type": "number"
                },
                "width": {
                    "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- For x-axis with a continuous (non-ordinal) scale, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- For x-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the width is determined by the value of `rangeStep` and the cardinality of the field mapped to x-channel.   Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note__: For plot with `row` and `column` channels, this represents the width of a single cell.",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "Legend": {
            "additionalProperties": false,
            "description": "Properties of a legend or boolean flag for determining whether to show it.",
            "properties": {
                "encoding": {
                    "$ref": "#/definitions/LegendEncoding",
                    "description": "Optional mark definitions for custom legend encoding."
                },
                "entryPadding": {
                    "description": "Padding (in pixels) between legend entries in a symbol legend.",
                    "type": "number"
                },
                "fillColor": {
                    "description": "Background fill color for the full legend.",
                    "type": "string"
                },
                "format": {
                    "description": "The formatting pattern for labels. This is D3's [number format pattern](https://github.com/mbostock/d3/wiki/Formatting) for quantitative fields and D3's [time format pattern](https://github.com/mbostock/d3/wiki/Time-Formatting) for time field.\n\n__Default value:__  derived from [numberFormat](config.html#format) config for quantitative fields and from [timeFormat](config.html#format) config for temporal fields.",
                    "type": "string"
                },
                "offset": {
                    "description": "The offset, in pixels, by which to displace the legend from the edge of the enclosing group or data rectangle.\n\n__Default value:__  `0`",
                    "type": "number"
                },
                "orient": {
                    "$ref": "#/definitions/LegendOrient",
                    "description": "The orientation of the legend. One of `\"left\"` or `\"right\"`. This determines how the legend is positioned within the scene. The default is `\"right\"`.\n\n__Default value:__  `\"right\"`"
                },
                "padding": {
                    "description": "The padding, in pixels, between the legend and axis.",
                    "type": "number"
                },
                "tickCount": {
                    "description": "The desired number of tick values for quantitative legends.",
                    "type": "number"
                },
                "title": {
                    "description": "A title for the field.\n\n__Default value:__  derived from the field's name and transformation function applied e.g, \"field_name\", \"SUM(field_name)\", \"BIN(field_name)\", \"YEAR(field_name)\".",
                    "type": "string"
                },
                "titleAlign": {
                    "description": "Horizontal text alignment for legend titles.",
                    "type": "string"
                },
                "type": {
                    "description": "The type of the legend. Use `symbol` to create a discrete legend and `gradient` for a continuous color gradient.",
                    "enum": [
                        "symbol",
                        "gradient"
                    ],
                    "type": "string"
                },
                "values": {
                    "anyOf": [
                        {
                            "items": {
                                "type": "number"
                            },
                            "type": "array"
                        },
                        {
                            "items": {
                                "type": "string"
                            },
                            "type": "array"
                        },
                        {
                            "items": {
                                "$ref": "#/definitions/DateTime"
                            },
                            "type": "array"
                        }
                    ],
                    "description": "Explicitly set the visible legend values."
                },
                "zindex": {
                    "description": "A non-positive integer indicating z-index of the legend.\nIf zindex is 0, legend should be drawn behind all chart elements.\nTo put them in front, use zindex = 1.",
                    "minimum": 0,
                    "type": "number"
                }
            },
            "type": "object"
        },
        "LegendConfig": {
            "additionalProperties": false,
            "properties": {
                "cornerRadius": {
                    "description": "Corner radius for the full legend.",
                    "type": "number"
                },
                "entryPadding": {
                    "description": "Padding (in pixels) between legend entries in a symbol legend.",
                    "type": "number"
                },
                "fillColor": {
                    "description": "Background fill color for the full legend.",
                    "type": "string"
                },
                "gradientHeight": {
                    "description": "The height of the gradient, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "gradientLabelBaseline": {
                    "description": "Text baseline for color ramp gradient labels.",
                    "type": "string"
                },
                "gradientLabelLimit": {
                    "description": "The maximum allowed length in pixels of color ramp gradient labels.",
                    "type": "number"
                },
                "gradientLabelOffset": {
                    "description": "Vertical offset in pixels for color ramp gradient labels.",
                    "type": "number"
                },
                "gradientStrokeColor": {
                    "description": "The color of the gradient stroke, can be in hex color code or regular color name.",
                    "type": "string"
                },
                "gradientStrokeWidth": {
                    "description": "The width of the gradient stroke, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "gradientWidth": {
                    "description": "The width of the gradient, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "labelAlign": {
                    "description": "The alignment of the legend label, can be left, middle or right.",
                    "type": "string"
                },
                "labelBaseline": {
                    "description": "The position of the baseline of legend label, can be top, middle or bottom.",
                    "type": "string"
                },
                "labelColor": {
                    "description": "The color of the legend label, can be in hex color code or regular color name.",
                    "type": "string"
                },
                "labelFont": {
                    "description": "The font of the legend label.",
                    "type": "string"
                },
                "labelFontSize": {
                    "description": "The font size of legend label.\n\n__Default value:__ `10`.",
                    "minimum": 0,
                    "type": "number"
                },
                "labelLimit": {
                    "description": "Maximum allowed pixel width of axis tick labels.",
                    "type": "number"
                },
                "labelOffset": {
                    "description": "The offset of the legend label.",
                    "minimum": 0,
                    "type": "number"
                },
                "offset": {
                    "description": "The offset, in pixels, by which to displace the legend from the edge of the enclosing group or data rectangle.\n\n__Default value:__  `0`",
                    "type": "number"
                },
                "orient": {
                    "$ref": "#/definitions/LegendOrient",
                    "description": "The orientation of the legend. One of `\"left\"` or `\"right\"`. This determines how the legend is positioned within the scene. The default is `\"right\"`.\n\n__Default value:__  `\"right\"`"
                },
                "padding": {
                    "description": "The padding, in pixels, between the legend and axis.",
                    "type": "number"
                },
                "shortTimeLabels": {
                    "description": "Whether month names and weekday names should be abbreviated.\n\n__Default value:__  `false`",
                    "type": "boolean"
                },
                "strokeColor": {
                    "description": "Border stroke color for the full legend.",
                    "type": "string"
                },
                "strokeDash": {
                    "description": "Border stroke dash pattern for the full legend.",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "strokeWidth": {
                    "description": "Border stroke width for the full legend.",
                    "type": "number"
                },
                "symbolColor": {
                    "description": "The color of the legend symbol,",
                    "type": "string"
                },
                "symbolSize": {
                    "description": "The size of the legend symbol, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "symbolStrokeWidth": {
                    "description": "The width of the symbol's stroke.",
                    "minimum": 0,
                    "type": "number"
                },
                "symbolType": {
                    "description": "Default shape type (such as \"circle\") for legend symbols.",
                    "type": "string"
                },
                "titleAlign": {
                    "description": "Horizontal text alignment for legend titles.",
                    "type": "string"
                },
                "titleBaseline": {
                    "description": "Optional mark property definitions for custom legend styling. \n Vertical text baseline for legend titles.",
                    "type": "string"
                },
                "titleColor": {
                    "description": "The color of the legend title, can be in hex color code or regular color name.",
                    "type": "string"
                },
                "titleFont": {
                    "description": "The font of the legend title.",
                    "type": "string"
                },
                "titleFontSize": {
                    "description": "The font size of the legend title.",
                    "type": "number"
                },
                "titleFontWeight": {
                    "description": "The font weight of the legend title.",
                    "type": [
                        "string",
                        "number"
                    ]
                },
                "titleLimit": {
                    "description": "Maximum allowed pixel width of axis titles.",
                    "type": "number"
                },
                "titlePadding": {
                    "description": "The padding, in pixels, between title and legend.",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "LegendEncoding": {
            "additionalProperties": false,
            "properties": {
                "gradient": {
                    "$ref": "#/definitions/GuideEncodingEntry",
                    "description": "Custom encoding for legend gradient filled rect marks."
                },
                "labels": {
                    "$ref": "#/definitions/GuideEncodingEntry",
                    "description": "Custom encoding for legend label text marks."
                },
                "legend": {
                    "$ref": "#/definitions/GuideEncodingEntry",
                    "description": "Custom encoding for the legend container.\nThis can be useful for creating legend with custom x, y position."
                },
                "symbols": {
                    "$ref": "#/definitions/GuideEncodingEntry",
                    "description": "Custom encoding for legend symbol marks."
                },
                "title": {
                    "$ref": "#/definitions/GuideEncodingEntry",
                    "description": "Custom encoding for the legend title text mark."
                }
            },
            "type": "object"
        },
        "LegendFieldDef": {
            "additionalProperties": false,
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "legend": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/Legend"
                        },
                        {
                            "type": "null"
                        }
                    ]
                },
                "scale": {
                    "$ref": "#/definitions/Scale"
                },
                "sort": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/SortField"
                        },
                        {
                            "$ref": "#/definitions/SortOrder"
                        }
                    ],
                    "description": "Sort order for a field with discrete domain.\nThis can be `\"ascending\"`, `\"descending\"`, `null`, or a [sort field definition object](sort.html#sort-field) for sorting by an aggregate calculation of a specified sort field.\n\n__Note:__ For fields with continuous domain, please use `\"scale\": {\"reverse\": true}` to flip the scale instead."
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "LegendOrient": {
            "enum": [
                "left",
                "right",
                "top-left",
                "top-right",
                "bottom-left",
                "bottom-right",
                "none"
            ],
            "type": "string"
        },
        "AndFilter": {
            "additionalProperties": false,
            "properties": {
                "and": {
                    "items": {
                        "$ref": "#/definitions/FilterOperand"
                    },
                    "type": "array"
                }
            },
            "required": [
                "and"
            ],
            "type": "object"
        },
        "SelectionAnd": {
            "additionalProperties": false,
            "properties": {
                "and": {
                    "items": {
                        "$ref": "#/definitions/SelectionOperand"
                    },
                    "type": "array"
                }
            },
            "required": [
                "and"
            ],
            "type": "object"
        },
        "NotFilter": {
            "additionalProperties": false,
            "properties": {
                "not": {
                    "$ref": "#/definitions/FilterOperand"
                }
            },
            "required": [
                "not"
            ],
            "type": "object"
        },
        "SelectionNot": {
            "additionalProperties": false,
            "properties": {
                "not": {
                    "$ref": "#/definitions/SelectionOperand"
                }
            },
            "required": [
                "not"
            ],
            "type": "object"
        },
        "FilterOperand": {
            "anyOf": [
                {
                    "$ref": "#/definitions/NotFilter"
                },
                {
                    "$ref": "#/definitions/AndFilter"
                },
                {
                    "$ref": "#/definitions/OrFilter"
                },
                {
                    "$ref": "#/definitions/Filter"
                }
            ]
        },
        "SelectionOperand": {
            "anyOf": [
                {
                    "$ref": "#/definitions/SelectionNot"
                },
                {
                    "$ref": "#/definitions/SelectionAnd"
                },
                {
                    "$ref": "#/definitions/SelectionOr"
                },
                {
                    "type": "string"
                }
            ]
        },
        "OrFilter": {
            "additionalProperties": false,
            "properties": {
                "or": {
                    "items": {
                        "$ref": "#/definitions/FilterOperand"
                    },
                    "type": "array"
                }
            },
            "required": [
                "or"
            ],
            "type": "object"
        },
        "SelectionOr": {
            "additionalProperties": false,
            "properties": {
                "or": {
                    "items": {
                        "$ref": "#/definitions/SelectionOperand"
                    },
                    "type": "array"
                }
            },
            "required": [
                "or"
            ],
            "type": "object"
        },
        "LookupData": {
            "additionalProperties": false,
            "properties": {
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "secondary data source to lookup in"
                },
                "fields": {
                    "description": "(Optional) fields in foreign data to lookup\nif not specificied, the entire object is queried",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "key": {
                    "description": "key in data to lookup",
                    "type": "string"
                }
            },
            "required": [
                "data",
                "key"
            ],
            "type": "object"
        },
        "LookupTransform": {
            "additionalProperties": false,
            "properties": {
                "as": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "items": {
                                "type": "string"
                            },
                            "type": "array"
                        }
                    ],
                    "description": "(Optional) The field or fields for storing the computed formula value.\nIf `from.fields` is not specified, `as` has to be a string and we put the whole object into the data"
                },
                "default": {
                    "description": "(Optional) The default value to use if lookup fails",
                    "type": "string"
                },
                "from": {
                    "$ref": "#/definitions/LookupData",
                    "description": "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": [
                "area",
                "bar",
                "line",
                "point",
                "text",
                "tick",
                "rect",
                "rule",
                "circle",
                "square"
            ],
            "type": "string"
        },
        "MarkConfig": {
            "additionalProperties": false,
            "properties": {
                "align": {
                    "$ref": "#/definitions/HorizontalAlign",
                    "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
                },
                "angle": {
                    "description": "The rotation angle of the text, in degrees.",
                    "maximum": 360,
                    "minimum": 0,
                    "type": "number"
                },
                "baseline": {
                    "$ref": "#/definitions/VerticalAlign",
                    "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
                },
                "color": {
                    "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`",
                    "type": "string"
                },
                "dx": {
                    "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
                    "type": "number"
                },
                "dy": {
                    "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
                    "type": "number"
                },
                "fill": {
                    "description": "Default Fill Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "fillOpacity": {
                    "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "filled": {
                    "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `true` for all marks except `point` and `false` for `point`.\n\n__Applicable for:__ `bar`, `point`, `circle`, `square`, and `area` marks.",
                    "type": "boolean"
                },
                "font": {
                    "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
                    "minimum": 0,
                    "type": "string"
                },
                "fontSize": {
                    "description": "The font size, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "fontStyle": {
                    "$ref": "#/definitions/FontStyle",
                    "description": "The font style (e.g., `\"italic\"`)."
                },
                "fontWeight": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FontWeight"
                        },
                        {
                            "$ref": "#/definitions/FontWeightNumber"
                        }
                    ],
                    "description": "The font weight (e.g., `\"bold\"`)."
                },
                "interpolate": {
                    "$ref": "#/definitions/Interpolate",
                    "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
                },
                "opacity": {
                    "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "orient": {
                    "$ref": "#/definitions/Orient",
                    "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
                },
                "radius": {
                    "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
                    "minimum": 0,
                    "type": "number"
                },
                "shape": {
                    "description": "The default symbol shape to use. One of: `\"circle\"` (default), `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, or `\"triangle-down\"`, or a custom SVG path.\n\n__Default value:__ `\"circle\"`",
                    "type": "string"
                },
                "size": {
                    "description": "The pixel area each the point/circle/square.\nFor example: in the case of circles, the radius is determined in part by the square root of the size value.\n\n__Default value:__ `30`",
                    "minimum": 0,
                    "type": "number"
                },
                "stroke": {
                    "description": "Default Stroke Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "strokeDash": {
                    "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "strokeDashOffset": {
                    "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
                    "type": "number"
                },
                "strokeOpacity": {
                    "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "strokeWidth": {
                    "description": "The stroke width, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "tension": {
                    "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "text": {
                    "description": "Placeholder text if the `text` channel is not specified",
                    "type": "string"
                },
                "theta": {
                    "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "MarkConfigMixins": {
            "additionalProperties": false,
            "properties": {
                "area": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Area-Specific Config "
                },
                "bar": {
                    "$ref": "#/definitions/BarConfig",
                    "description": "Bar-Specific Config "
                },
                "circle": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Circle-Specific Config "
                },
                "line": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Line-Specific Config "
                },
                "mark": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Mark Config "
                },
                "point": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Point-Specific Config "
                },
                "rect": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Rect-Specific Config "
                },
                "rule": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Rule-Specific Config "
                },
                "square": {
                    "$ref": "#/definitions/MarkConfig",
                    "description": "Square-Specific Config "
                },
                "text": {
                    "$ref": "#/definitions/TextConfig",
                    "description": "Text-Specific Config "
                },
                "tick": {
                    "$ref": "#/definitions/TickConfig",
                    "description": "Tick-Specific Config "
                }
            },
            "type": "object"
        },
        "MarkDef": {
            "additionalProperties": false,
            "properties": {
                "clip": {
                    "description": "Should a mark be clipped to the enclosing group\u2019s width and height?",
                    "type": "boolean"
                },
                "filled": {
                    "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ All marks except `\"point\"`, `\"line\"`, and `\"rule\"` are filled by default.",
                    "type": "boolean"
                },
                "interpolate": {
                    "$ref": "#/definitions/Interpolate",
                    "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y.\n\nFor more information about each interpolation method, please see [D3's line interpolation](https://github.com/mbostock/d3/wiki/SVG-Shapes#line_interpolate)."
                },
                "orient": {
                    "$ref": "#/definitions/Orient",
                    "description": "TODO"
                },
                "role": {
                    "description": "A metadata string indicating the role of the mark.\nThis allows users to use `config.<role-name>.*` (e.g., `config.myrolename.fill`) to customize properties of marks with specific roles.\nIn addition, SVG renderers will add this role value (prepended with the prefix role-) as a CSS class name on the enclosing SVG group (`<g>`) element containing the mark instances.\n\n__Default value:__ For `bar`, `circle`, `point`, `rule`, `square` and `tick` marks, the role is the mark type (e.g., `role: \"bar\"` for `bar` mark).\nFor other marks (which use the same marks in the lower-level Vega), the role is `undefined` by default.\n\n__Note:__ Switching from a default to custom role may alter the plot's appearance\nas default [mark-specific configs](config.html#mark-config) will no longer be applied.",
                    "type": "string"
                },
                "tension": {
                    "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).\n\nTODO: provide the link to D3 docs.",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "type": {
                    "$ref": "#/definitions/Mark",
                    "description": "The mark type.\nOne of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, and `\"text\"`."
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "Month": {
            "maximum": 12,
            "minimum": 1,
            "type": "number"
        },
        "MultiSelection": {
            "additionalProperties": false,
            "properties": {
                "encodings": {
                    "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.",
                    "items": {
                        "$ref": "#/definitions/SingleDefChannel"
                    },
                    "type": "array"
                },
                "fields": {
                    "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "nearest": {
                    "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.",
                    "type": "boolean"
                },
                "on": {
                    "description": "A Vega event stream (object or selector) that triggers the selection."
                },
                "resolve": {
                    "$ref": "#/definitions/SelectionResolution",
                    "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain. One of: \"global\", \"union\",\n\"intersect\", \"union_others\", or \"intersect_others\".\n\n__global__: Only one instance of the selection exists across all\nviews. When a user interacts within a new view, any previous selections\nare overridden.\n\n__union__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _any_ of these selection\ninstances.\n\n__intersect__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _all_ of these selection\ninstances."
                },
                "toggle": {
                    "description": "Controls whether data values should be toggled or only ever inserted into\nmulti selections. Can be `true`, `false` (for insertion only), or a\n[Vega expression](https://vega.github.io/vega/docs/expressions/).\n\n__Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,\ndata values are toggled when a user interacts with the shift-key pressed).",
                    "type": [
                        "string",
                        "boolean"
                    ]
                },
                "type": {
                    "enum": [
                        "multi"
                    ],
                    "type": "string"
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "MultiSelectionConfig": {
            "additionalProperties": false,
            "properties": {
                "encodings": {
                    "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.",
                    "items": {
                        "$ref": "#/definitions/SingleDefChannel"
                    },
                    "type": "array"
                },
                "fields": {
                    "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "nearest": {
                    "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.",
                    "type": "boolean"
                },
                "on": {
                    "description": "A Vega event stream (object or selector) that triggers the selection."
                },
                "resolve": {
                    "$ref": "#/definitions/SelectionResolution",
                    "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain. One of: \"global\", \"union\",\n\"intersect\", \"union_others\", or \"intersect_others\".\n\n__global__: Only one instance of the selection exists across all\nviews. When a user interacts within a new view, any previous selections\nare overridden.\n\n__union__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _any_ of these selection\ninstances.\n\n__intersect__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _all_ of these selection\ninstances."
                },
                "toggle": {
                    "description": "Controls whether data values should be toggled or only ever inserted into\nmulti selections. Can be `true`, `false` (for insertion only), or a\n[Vega expression](https://vega.github.io/vega/docs/expressions/).\n\n__Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,\ndata values are toggled when a user interacts with the shift-key pressed).",
                    "type": [
                        "string",
                        "boolean"
                    ]
                }
            },
            "type": "object"
        },
        "NamedData": {
            "additionalProperties": false,
            "properties": {
                "format": {
                    "$ref": "#/definitions/DataFormat",
                    "description": "Data format properties"
                },
                "name": {
                    "description": "Provide a placeholder name and bind data at runtime.",
                    "type": "string"
                }
            },
            "required": [
                "name"
            ],
            "type": "object"
        },
        "NonspatialResolve": {
            "additionalProperties": false,
            "properties": {
                "legend": {
                    "$ref": "#/definitions/ResolveMode"
                },
                "scale": {
                    "$ref": "#/definitions/ResolveMode"
                }
            },
            "type": "object"
        },
        "OneOfFilter": {
            "additionalProperties": false,
            "properties": {
                "field": {
                    "description": "Field to be filtered",
                    "type": "string"
                },
                "oneOf": {
                    "anyOf": [
                        {
                            "items": {
                                "type": "string"
                            },
                            "type": "array"
                        },
                        {
                            "items": {
                                "type": "number"
                            },
                            "type": "array"
                        },
                        {
                            "items": {
                                "type": "boolean"
                            },
                            "type": "array"
                        },
                        {
                            "items": {
                                "$ref": "#/definitions/DateTime"
                            },
                            "type": "array"
                        }
                    ],
                    "description": "A set of values that the `field`'s value should be a member of,\nfor a data item included in the filtered data."
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "time unit for the field to be filtered."
                }
            },
            "required": [
                "field",
                "oneOf"
            ],
            "type": "object"
        },
        "OrderFieldDef": {
            "additionalProperties": false,
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "sort": {
                    "$ref": "#/definitions/SortOrder"
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "Orient": {
            "enum": [
                "horizontal",
                "vertical"
            ],
            "type": "string"
        },
        "Padding": {
            "anyOf": [
                {
                    "type": "number"
                },
                {
                    "additionalProperties": false,
                    "properties": {
                        "bottom": {
                            "type": "number"
                        },
                        "left": {
                            "type": "number"
                        },
                        "right": {
                            "type": "number"
                        },
                        "top": {
                            "type": "number"
                        }
                    },
                    "type": "object"
                }
            ],
            "minimum": 0
        },
        "PositionFieldDef": {
            "additionalProperties": false,
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "axis": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/Axis"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "description": "By default, Vega-Lite automatically creates axes for `x` and `y` channels when they are encoded.\nIf `axis` is not defined, default axis properties are applied.\nUser can provide set `axis` to an object to customize [axis properties](axis.html#axis-properties)\nor set `axis` to `null` to remove the axis."
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "scale": {
                    "$ref": "#/definitions/Scale"
                },
                "sort": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/SortField"
                        },
                        {
                            "$ref": "#/definitions/SortOrder"
                        }
                    ],
                    "description": "Sort order for a field with discrete domain.\nThis can be `\"ascending\"`, `\"descending\"`, `null`, or a [sort field definition object](sort.html#sort-field) for sorting by an aggregate calculation of a specified sort field.\n\n__Note:__ For fields with continuous domain, please use `\"scale\": {\"reverse\": true}` to flip the scale instead."
                },
                "stack": {
                    "$ref": "#/definitions/StackOffset",
                    "description": "Type of stacking offset if the field should be stacked.\n\"none\" or null, if the field should not be stacked."
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "Range": {
            "anyOf": [
                {
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                {
                    "type": "string"
                }
            ]
        },
        "RangeConfig": {
            "anyOf": [
                {
                    "items": {
                        "type": [
                            "number",
                            "string"
                        ]
                    },
                    "type": "array"
                },
                {
                    "$ref": "#/definitions/VgRangeScheme"
                },
                {
                    "additionalProperties": false,
                    "properties": {
                        "step": {
                            "type": "number"
                        }
                    },
                    "required": [
                        "step"
                    ],
                    "type": "object"
                }
            ]
        },
        "RangeFilter": {
            "additionalProperties": false,
            "properties": {
                "field": {
                    "description": "Field to be filtered",
                    "type": "string"
                },
                "range": {
                    "description": "An array of inclusive minimum and maximum values\nfor a field value of a data item to be included in the filtered data.",
                    "items": {
                        "anyOf": [
                            {
                                "type": "number"
                            },
                            {
                                "$ref": "#/definitions/DateTime"
                            }
                        ]
                    },
                    "maxItems": 2,
                    "minItems": 2,
                    "type": "array"
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "time unit for the field to be filtered."
                }
            },
            "required": [
                "field",
                "range"
            ],
            "type": "object"
        },
        "Repeat": {
            "additionalProperties": false,
            "properties": {
                "column": {
                    "description": "Horizontal repeated views.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "row": {
                    "description": "Vertical repeated views.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "type": "object"
        },
        "RepeatRef": {
            "additionalProperties": false,
            "description": "Reference to a repeated value.",
            "properties": {
                "repeat": {
                    "enum": [
                        "row",
                        "column"
                    ],
                    "type": "string"
                }
            },
            "required": [
                "repeat"
            ],
            "type": "object"
        },
        "ResolveMapping": {
            "additionalProperties": false,
            "properties": {
                "color": {
                    "$ref": "#/definitions/NonspatialResolve"
                },
                "opacity": {
                    "$ref": "#/definitions/NonspatialResolve"
                },
                "shape": {
                    "$ref": "#/definitions/NonspatialResolve"
                },
                "size": {
                    "$ref": "#/definitions/NonspatialResolve"
                },
                "x": {
                    "$ref": "#/definitions/SpatialResolve"
                },
                "y": {
                    "$ref": "#/definitions/SpatialResolve"
                }
            },
            "type": "object"
        },
        "ResolveMode": {
            "enum": [
                "independent",
                "shared"
            ],
            "type": "string"
        },
        "Scale": {
            "additionalProperties": false,
            "properties": {
                "clamp": {
                    "description": "If `true`, values that exceed the data domain are clamped to either the minimum or maximum range value\n\n__Default value:__ derived from [scale config](config.html#scale-config) (`true` by default)\n\n__Supported types:__ only `linear`, `pow`, `sqrt`, and `log` (Not applicable for `quantile`, `quantize`, and `threshold` scales as they output discrete ranges.)",
                    "type": "boolean"
                },
                "domain": {
                    "$ref": "#/definitions/Domain",
                    "description": "The domain of the scale, representing the set of data values. For quantitative data, this can take the form of a two-element array with minimum and maximum values. For ordinal/categorical data, this may be an array of valid input values.\n\nIf the domain is `\"unaggregated\"`, we use the source data range before aggregation as scale domain instead of aggregated data for an aggregate axis.\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."
                },
                "exponent": {
                    "description": "Sets the exponent of the scale transformation. For `pow` scale types only, otherwise ignored.",
                    "type": "number"
                },
                "interpolate": {
                    "enum": [
                        "rgb",
                        "lab",
                        "hcl",
                        "hsl",
                        "hsl-long",
                        "hcl-long",
                        "cubehelix",
                        "cubehelix-long"
                    ],
                    "type": "string"
                },
                "nice": {
                    "description": "As quantitative scale property, if specified, modifies the scale domain to use a more human-friendly value range. If specified as a `true` boolean, modifies the scale domain to use a more human-friendly number range (e.g., 7 instead of 6.96). If specified as a string, modifies the scale domain to use a more human-friendly value range. For time and utc scale types only, the nice value should be a string indicating the desired time interval.\nAs time scale properties, if `true`, values that exceed the data domain are clamped to either the minimum or maximum range value. (Not applicable for `quantile`, `quantize`, and `threshold` scales as they output discrete ranges.)\n\n__Default value:__ `true` only for quantitative x and y scales and `false` otherwise.",
                    "type": [
                        "boolean",
                        "string"
                    ]
                },
                "padding": {
                    "description": "Applies spacing among ordinal elements in the scale range. The actual effect depends on how the scale is configured. If the __points__ parameter is `true`, the padding value is interpreted as a multiple of the spacing between points. A reasonable value is 1.0, such that the first and last point will be offset from the minimum and maximum value by half the distance between points. Otherwise, padding is typically in the range [0, 1] and corresponds to the fraction of space in the range interval to allocate to padding. A value of 0.5 means that the band size will be equal to the padding width. For more, see the [D3 ordinal scale documentation](https://github.com/mbostock/d3/wiki/Ordinal-Scales).\nA convenience property for setting the inner and outer padding to the same value.\n\n__Default value:__ `x` and `y` channels are derived from [scale config](config.html#scale-config)'s `pointPadding` for `point` scale and `bandPadding` for `band` scale.  Other channels have `0` padding by default.",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "paddingInner": {
                    "description": "The inner padding of a band scale determines the ratio of the range that is reserved for blank space between bands. (For point scale, this property is ignored.)",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "paddingOuter": {
                    "description": "The outer padding determines the ratio of the range that is reserved for blank space before the first and after the last bands/points.",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "range": {
                    "$ref": "#/definitions/Range",
                    "description": "The range of the scale, representing the set of visual values. For numeric values, the range can take the form of a two-element array with minimum and maximum values. For ordinal or quantized data, the range may by an array of desired output values, which are mapped to elements in the specified domain."
                },
                "rangeStep": {
                    "description": "The distance between the starts of adjacent bands or points in band or point scales.\nIf this value is `null`, this will be determined to fit width (for x) or height (for y) of the plot.\nIf both width and x-scale's rangeStep is provided, rangeStep will be dropped.  (The same rule is applied for height and y-scale's rangeStep.)\n\n__Default Rule:__ for `x` ordinal scale of a `text` mark, derived from [scale config](config.html#scale-config)'s `textXRangeStep`. Otherwise, derived from [scale config](config.html#scale-config)'s `rangeStep`.\n__Warning:__ If the cardinality of the scale domain is too high, the rangeStep might become less than one pixel and the mark might not appear correctly.",
                    "minimum": 0,
                    "type": [
                        "number",
                        "null"
                    ]
                },
                "reverse": {
                    "description": "If true, reverses the order of the scale range.\n__Default value:__ `false`.",
                    "type": "boolean"
                },
                "round": {
                    "description": "If `true`, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid.\n\n__Default Rule:__ `true` for `\"x\"`, `\"y\"`, `\"row\"`, `\"column\"` channels if scale config's `round` is `true`; `false` otherwise.",
                    "type": "boolean"
                },
                "scheme": {
                    "$ref": "#/definitions/Scheme",
                    "description": "Range scheme (e.g., color schemes such as `\"category10\"` or `\"viridis\"`).\n\n__Default value:__ [scale config](config.html#scale-config)'s `\"nominalColorScheme\"` for nominal field and `\"sequentialColorScheme\"` for other types of fields."
                },
                "type": {
                    "$ref": "#/definitions/ScaleType",
                    "description": "The type of scale.\n- For a _quantitative_ field, supported quantitative scale types  are `\"linear\"` (default), `\"log\"`, `\"pow\"`, `\"sqrt\"`, `\"quantile\"`, `\"quantize\"`, and `\"threshold\"`.\n- For a _temporal_ field without `timeUnit`, the scale type should be `\"time\"` (default), `\"utc\"` or `\"ordinal\"`. See more about [UTC time](timeunit.html#utc)\n- For _ordinal_ and _nominal_ fields, the type is always `\"ordinal\"`.\nUnsupported values will be ignored."
                },
                "zero": {
                    "description": "If `true`, ensures that a zero baseline value is included in the scale domain.\nDefault value: `true` for `x` and `y` channel if the quantitative field is not binned\nand no custom `domain` is provided; `false` otherwise.\n\n__Default value:__ `true` for `x` and `y` channel if the quantitative field is not binned and no custom `domain` is provided; `false` otherwise.\n\n__Note:__  This property is always `false` for log scale.",
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "ScaleConfig": {
            "additionalProperties": false,
            "properties": {
                "bandPaddingInner": {
                    "description": "Default inner padding for `x` and `y` band-ordinal scales.\n\n__Default value:__ `0.1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "bandPaddingOuter": {
                    "description": "Default outer padding for `x` and `y` band-ordinal scales.\nIf not specified, by default, band scale's paddingOuter is paddingInner/2.",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "clamp": {
                    "description": "If true, values that exceed the data domain are clamped to either the minimum or maximum range value",
                    "type": "boolean"
                },
                "maxBandSize": {
                    "description": "The default max value for mapping quantitative fields to bar's size/bandSize.\nIf undefined (default), we will use bandSize - 1.",
                    "minimum": 0,
                    "type": "number"
                },
                "maxFontSize": {
                    "description": "The default max value for mapping quantitative fields to text's size/fontSize.\nIf undefined (default), we will use bandSize - 1.\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 strokeWidth  (or rule/line's size) scale.\n\n__Default value:__ `4`",
                    "minimum": 0,
                    "type": "number"
                },
                "minBandSize": {
                    "description": "The default min value for mapping quantitative fields to bar and tick's size/bandSize scale with zero=false\nIf undefined (default), we will use the `continuousBandSize` value for bar and 3 for ticks.",
                    "minimum": 0,
                    "type": "number"
                },
                "minFontSize": {
                    "description": "The default min value for mapping quantitative fields to tick's size/fontSize scale with zero=false\n\n__Default value:__ `8`",
                    "minimum": 0,
                    "type": "number"
                },
                "minOpacity": {
                    "description": "Default minimum opacity for mapping a field to opacity.\n\n__Default value:__ `0.3`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "minSize": {
                    "description": "Default minimum value for point size scale with zero=false.\n\n__Default value:__ `9`",
                    "minimum": 0,
                    "type": "number"
                },
                "minStrokeWidth": {
                    "description": "Default minimum strokeWidth for strokeWidth (or rule/line's size) scale with zero=false.\n\n__Default value:__ `1`",
                    "minimum": 0,
                    "type": "number"
                },
                "pointPadding": {
                    "description": "Default outer padding for `x` and `y` point-ordinal scales.\n\n__Default value:__ `0.5`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "rangeStep": {
                    "description": "Default range step for (1) `y` ordinal scale,\nand (2) `x` ordinal scale when the mark is not `text`.\n\n__Default value:__ `21`",
                    "minimum": 0,
                    "type": [
                        "number",
                        "null"
                    ]
                },
                "round": {
                    "description": "If true, rounds numeric output values to integers.\nThis can be helpful for snapping to the pixel grid.\n(Only available for `x`, `y`, `size`, `row`, and `column` scales.)",
                    "type": "boolean"
                },
                "shapes": {
                    "description": "The default collection of symbol shapes for mapping nominal fields to shapes of point marks (i.e., range of a `shape` scale).\nEach value should be one of: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, or `\"triangle-down\"`, or a custom SVG path.\n\n__Default value:__ `[\"circle\", \"square\", \"cross\", \"diamond\", \"triangle-up\", \"triangle-down\"]`",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "textXRangeStep": {
                    "description": "Default range step for `x` ordinal scale when is mark is `text`.\n\n__Default value:__ `90`",
                    "minimum": 0,
                    "type": "number"
                },
                "useUnaggregatedDomain": {
                    "description": "Use the source data range before aggregation as scale domain instead of aggregated data for aggregate axis.\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.",
                    "type": "boolean"
                }
            },
            "type": "object"
        },
        "ScaleFieldDef": {
            "additionalProperties": false,
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "scale": {
                    "$ref": "#/definitions/Scale"
                },
                "sort": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/SortField"
                        },
                        {
                            "$ref": "#/definitions/SortOrder"
                        }
                    ],
                    "description": "Sort order for a field with discrete domain.\nThis can be `\"ascending\"`, `\"descending\"`, `null`, or a [sort field definition object](sort.html#sort-field) for sorting by an aggregate calculation of a specified sort field.\n\n__Note:__ For fields with continuous domain, please use `\"scale\": {\"reverse\": true}` to flip the scale instead."
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "ScaleType": {
            "enum": [
                "linear",
                "bin-linear",
                "log",
                "pow",
                "sqrt",
                "time",
                "utc",
                "sequential",
                "ordinal",
                "bin-ordinal",
                "point",
                "band"
            ],
            "type": "string"
        },
        "Scheme": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "$ref": "#/definitions/ExtendedScheme"
                }
            ]
        },
        "SelectionConfig": {
            "additionalProperties": false,
            "properties": {
                "interval": {
                    "$ref": "#/definitions/IntervalSelectionConfig"
                },
                "multi": {
                    "$ref": "#/definitions/MultiSelectionConfig"
                },
                "single": {
                    "$ref": "#/definitions/SingleSelectionConfig"
                }
            },
            "required": [
                "single",
                "multi",
                "interval"
            ],
            "type": "object"
        },
        "SelectionDef": {
            "anyOf": [
                {
                    "$ref": "#/definitions/SingleSelection"
                },
                {
                    "$ref": "#/definitions/MultiSelection"
                },
                {
                    "$ref": "#/definitions/IntervalSelection"
                }
            ]
        },
        "SelectionDomain": {
            "anyOf": [
                {
                    "additionalProperties": false,
                    "properties": {
                        "field": {
                            "type": "string"
                        },
                        "selection": {
                            "type": "string"
                        }
                    },
                    "required": [
                        "selection"
                    ],
                    "type": "object"
                },
                {
                    "additionalProperties": false,
                    "properties": {
                        "encoding": {
                            "type": "string"
                        },
                        "selection": {
                            "type": "string"
                        }
                    },
                    "required": [
                        "selection"
                    ],
                    "type": "object"
                }
            ]
        },
        "SelectionFilter": {
            "additionalProperties": false,
            "properties": {
                "selection": {
                    "$ref": "#/definitions/SelectionOperand",
                    "description": "Filter using a selection name."
                }
            },
            "required": [
                "selection"
            ],
            "type": "object"
        },
        "SelectionResolution": {
            "enum": [
                "global",
                "union",
                "intersect"
            ],
            "type": "string"
        },
        "SingleDefChannel": {
            "enum": [
                "x",
                "y",
                "x2",
                "y2",
                "row",
                "column",
                "size",
                "shape",
                "color",
                "opacity",
                "text",
                "tooltip"
            ],
            "type": "string"
        },
        "SingleSelection": {
            "additionalProperties": false,
            "properties": {
                "bind": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/VgBinding"
                        },
                        {
                            "additionalProperties": {
                                "$ref": "#/definitions/VgBinding"
                            },
                            "type": "object"
                        }
                    ],
                    "description": "Establish a two-way binding between a single selection and input elements\n(also known as dynamic query widgets). A binding takes the form of\nVega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\nor can be a mapping between projected field/encodings and binding definitions."
                },
                "encodings": {
                    "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.",
                    "items": {
                        "$ref": "#/definitions/SingleDefChannel"
                    },
                    "type": "array"
                },
                "fields": {
                    "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "nearest": {
                    "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.",
                    "type": "boolean"
                },
                "on": {
                    "description": "A Vega event stream (object or selector) that triggers the selection."
                },
                "resolve": {
                    "$ref": "#/definitions/SelectionResolution",
                    "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain. One of: \"global\", \"union\",\n\"intersect\", \"union_others\", or \"intersect_others\".\n\n__global__: Only one instance of the selection exists across all\nviews. When a user interacts within a new view, any previous selections\nare overridden.\n\n__union__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _any_ of these selection\ninstances.\n\n__intersect__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _all_ of these selection\ninstances."
                },
                "type": {
                    "enum": [
                        "single"
                    ],
                    "type": "string"
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "SingleSelectionConfig": {
            "additionalProperties": false,
            "properties": {
                "bind": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/VgBinding"
                        },
                        {
                            "additionalProperties": {
                                "$ref": "#/definitions/VgBinding"
                            },
                            "type": "object"
                        }
                    ],
                    "description": "Establish a two-way binding between a single selection and input elements\n(also known as dynamic query widgets). A binding takes the form of\nVega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\nor can be a mapping between projected field/encodings and binding definitions."
                },
                "encodings": {
                    "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.",
                    "items": {
                        "$ref": "#/definitions/SingleDefChannel"
                    },
                    "type": "array"
                },
                "fields": {
                    "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "nearest": {
                    "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.",
                    "type": "boolean"
                },
                "on": {
                    "description": "A Vega event stream (object or selector) that triggers the selection."
                },
                "resolve": {
                    "$ref": "#/definitions/SelectionResolution",
                    "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain. One of: \"global\", \"union\",\n\"intersect\", \"union_others\", or \"intersect_others\".\n\n__global__: Only one instance of the selection exists across all\nviews. When a user interacts within a new view, any previous selections\nare overridden.\n\n__union__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _any_ of these selection\ninstances.\n\n__intersect__: Each view contains its own selection, and a data value is\nconsidered to be selected if it falls within _all_ of these selection\ninstances."
                }
            },
            "type": "object"
        },
        "SortField": {
            "additionalProperties": false,
            "properties": {
                "field": {
                    "description": "The field name to aggregate over.",
                    "type": "string"
                },
                "op": {
                    "$ref": "#/definitions/AggregateOp",
                    "description": "The sort aggregation operator"
                },
                "order": {
                    "$ref": "#/definitions/SortOrder"
                }
            },
            "required": [
                "op"
            ],
            "type": "object"
        },
        "SortOrder": {
            "anyOf": [
                {
                    "enum": [
                        "ascending"
                    ],
                    "type": "string"
                },
                {
                    "enum": [
                        "descending"
                    ],
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ]
        },
        "SpatialResolve": {
            "additionalProperties": false,
            "properties": {
                "axis": {
                    "$ref": "#/definitions/ResolveMode"
                },
                "scale": {
                    "$ref": "#/definitions/ResolveMode"
                }
            },
            "type": "object"
        },
        "StackOffset": {
            "enum": [
                "zero",
                "center",
                "normalize",
                "none"
            ],
            "type": "string"
        },
        "Summarize": {
            "additionalProperties": false,
            "properties": {
                "aggregate": {
                    "$ref": "#/definitions/AggregateOp",
                    "description": "The aggregation operations to apply to the fields, such as sum, average or count.\nSee the [full list of supported aggregation operations](https://vega.github.io/vega-lite/docs/aggregate.html#supported-aggregation-operations)\nfor more information."
                },
                "as": {
                    "description": "The output field names to use for each aggregated field.",
                    "type": "string"
                },
                "field": {
                    "description": "The data field for which to compute aggregate function.",
                    "type": "string"
                }
            },
            "required": [
                "aggregate",
                "field",
                "as"
            ],
            "type": "object"
        },
        "SummarizeTransform": {
            "additionalProperties": false,
            "properties": {
                "groupby": {
                    "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.",
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                },
                "summarize": {
                    "description": "Array of objects that define aggregate fields.",
                    "items": {
                        "$ref": "#/definitions/Summarize"
                    },
                    "type": "array"
                }
            },
            "required": [
                "summarize"
            ],
            "type": "object"
        },
        "TextConfig": {
            "additionalProperties": false,
            "properties": {
                "align": {
                    "description": "The horizontal text alignment.",
                    "enum": [
                        "left",
                        "center",
                        "right"
                    ],
                    "type": "string"
                },
                "angle": {
                    "description": "The rotation angle of the text, in degrees.",
                    "maximum": 360,
                    "minimum": 0,
                    "type": "number"
                },
                "baseline": {
                    "$ref": "#/definitions/VerticalAlign",
                    "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
                },
                "color": {
                    "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`",
                    "type": "string"
                },
                "dx": {
                    "description": "The horizontal offset in pixels (before rotation), between the text and anchor point.",
                    "type": "number"
                },
                "dy": {
                    "description": "The vertical offset in pixels (before rotation), between the text and anchor point.",
                    "type": "number"
                },
                "fill": {
                    "description": "Default Fill Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "fillOpacity": {
                    "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "filled": {
                    "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `true` for all marks except `point` and `false` for `point`.\n\n__Applicable for:__ `bar`, `point`, `circle`, `square`, and `area` marks.",
                    "type": "boolean"
                },
                "font": {
                    "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
                    "minimum": 0,
                    "type": "string"
                },
                "fontSize": {
                    "description": "The font size, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "fontStyle": {
                    "$ref": "#/definitions/FontStyle",
                    "description": "The font style (e.g., `\"italic\"`)."
                },
                "fontWeight": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FontWeight"
                        },
                        {
                            "$ref": "#/definitions/FontWeightNumber"
                        }
                    ],
                    "description": "The font weight (e.g., `\"bold\"`)."
                },
                "interpolate": {
                    "$ref": "#/definitions/Interpolate",
                    "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
                },
                "opacity": {
                    "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "orient": {
                    "$ref": "#/definitions/Orient",
                    "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
                },
                "radius": {
                    "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
                    "minimum": 0,
                    "type": "number"
                },
                "shape": {
                    "description": "The default symbol shape to use. One of: `\"circle\"` (default), `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, or `\"triangle-down\"`, or a custom SVG path.\n\n__Default value:__ `\"circle\"`",
                    "type": "string"
                },
                "shortTimeLabels": {
                    "description": "Whether month names and weekday names should be abbreviated.",
                    "type": "boolean"
                },
                "size": {
                    "description": "The pixel area each the point/circle/square.\nFor example: in the case of circles, the radius is determined in part by the square root of the size value.\n\n__Default value:__ `30`",
                    "minimum": 0,
                    "type": "number"
                },
                "stroke": {
                    "description": "Default Stroke Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "strokeDash": {
                    "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "strokeDashOffset": {
                    "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
                    "type": "number"
                },
                "strokeOpacity": {
                    "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "strokeWidth": {
                    "description": "The stroke width, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "tension": {
                    "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "text": {
                    "description": "Placeholder text if the `text` channel is not specified",
                    "type": "string"
                },
                "theta": {
                    "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "TextFieldDef": {
            "additionalProperties": false,
            "properties": {
                "aggregate": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/AggregateOp"
                        },
                        {
                            "$ref": "#/definitions/CompositeAggregate"
                        }
                    ],
                    "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)"
                },
                "bin": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "$ref": "#/definitions/Bin"
                        }
                    ],
                    "description": "Flag for binning a `quantitative` field, or a bin property object\nfor binning parameters."
                },
                "field": {
                    "$ref": "#/definitions/Field",
                    "description": "__Required.__ Name of the field from which to pull a data value.\n\n__Note:__ `field` is not required if `aggregate` is `count`."
                },
                "format": {
                    "description": "The formatting pattern for text value. If not defined, this will be determined automatically.",
                    "type": "string"
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "Time unit for a `temporal` field  (e.g., `year`, `yearmonth`, `month`, `hour`).\n\n__Default value:__ `undefined` (None)"
                },
                "type": {
                    "$ref": "#/definitions/Type",
                    "description": "The encoded field's type of measurement. This can be either a full type\nname (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`,  and `\"nominal\"`)\nor an initial character of the type name (`\"Q\"`, `\"T\"`, `\"O\"`, `\"N\"`).\nThis property is case-insensitive."
                }
            },
            "required": [
                "type"
            ],
            "type": "object"
        },
        "TickConfig": {
            "additionalProperties": false,
            "properties": {
                "align": {
                    "$ref": "#/definitions/HorizontalAlign",
                    "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
                },
                "angle": {
                    "description": "The rotation angle of the text, in degrees.",
                    "maximum": 360,
                    "minimum": 0,
                    "type": "number"
                },
                "bandSize": {
                    "description": "The width of the ticks.\nIf this value is undefined (by default,), we use 2/3 of rangeStep by default.",
                    "minimum": 0,
                    "type": "number"
                },
                "baseline": {
                    "$ref": "#/definitions/VerticalAlign",
                    "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
                },
                "color": {
                    "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`",
                    "type": "string"
                },
                "dx": {
                    "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
                    "type": "number"
                },
                "dy": {
                    "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
                    "type": "number"
                },
                "fill": {
                    "description": "Default Fill Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "fillOpacity": {
                    "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "filled": {
                    "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `true` for all marks except `point` and `false` for `point`.\n\n__Applicable for:__ `bar`, `point`, `circle`, `square`, and `area` marks.",
                    "type": "boolean"
                },
                "font": {
                    "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
                    "minimum": 0,
                    "type": "string"
                },
                "fontSize": {
                    "description": "The font size, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "fontStyle": {
                    "$ref": "#/definitions/FontStyle",
                    "description": "The font style (e.g., `\"italic\"`)."
                },
                "fontWeight": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FontWeight"
                        },
                        {
                            "$ref": "#/definitions/FontWeightNumber"
                        }
                    ],
                    "description": "The font weight (e.g., `\"bold\"`)."
                },
                "interpolate": {
                    "$ref": "#/definitions/Interpolate",
                    "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
                },
                "opacity": {
                    "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "orient": {
                    "$ref": "#/definitions/Orient",
                    "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
                },
                "radius": {
                    "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
                    "minimum": 0,
                    "type": "number"
                },
                "shape": {
                    "description": "The default symbol shape to use. One of: `\"circle\"` (default), `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, or `\"triangle-down\"`, or a custom SVG path.\n\n__Default value:__ `\"circle\"`",
                    "type": "string"
                },
                "size": {
                    "description": "The pixel area each the point/circle/square.\nFor example: in the case of circles, the radius is determined in part by the square root of the size value.\n\n__Default value:__ `30`",
                    "minimum": 0,
                    "type": "number"
                },
                "stroke": {
                    "description": "Default Stroke Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "strokeDash": {
                    "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "strokeDashOffset": {
                    "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
                    "type": "number"
                },
                "strokeOpacity": {
                    "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "strokeWidth": {
                    "description": "The stroke width, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "tension": {
                    "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "text": {
                    "description": "Placeholder text if the `text` channel is not specified",
                    "type": "string"
                },
                "theta": {
                    "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
                    "type": "number"
                },
                "thickness": {
                    "description": "Thickness of the tick mark.\n\n__Default value:__  `1`",
                    "minimum": 0,
                    "type": "number"
                }
            },
            "type": "object"
        },
        "TimeUnit": {
            "enum": [
                "year",
                "month",
                "day",
                "date",
                "hours",
                "minutes",
                "seconds",
                "milliseconds",
                "yearmonth",
                "yearmonthdate",
                "yearmonthdatehours",
                "yearmonthdatehoursminutes",
                "yearmonthdatehoursminutesseconds",
                "monthdate",
                "hoursminutes",
                "hoursminutesseconds",
                "minutesseconds",
                "secondsmilliseconds",
                "quarter",
                "yearquarter",
                "quartermonth",
                "yearquartermonth",
                "utcyear",
                "utcmonth",
                "utcday",
                "utcdate",
                "utchours",
                "utcminutes",
                "utcseconds",
                "utcmilliseconds",
                "utcyearmonth",
                "utcyearmonthdate",
                "utcyearmonthdatehours",
                "utcyearmonthdatehoursminutes",
                "utcyearmonthdatehoursminutesseconds",
                "utcmonthdate",
                "utchoursminutes",
                "utchoursminutesseconds",
                "utcminutesseconds",
                "utcsecondsmilliseconds",
                "utcquarter",
                "utcyearquarter",
                "utcquartermonth",
                "utcyearquartermonth"
            ],
            "type": "string"
        },
        "TimeUnitTransform": {
            "additionalProperties": false,
            "properties": {
                "as": {
                    "description": "The output field to write the timeUnit value.",
                    "type": "string"
                },
                "field": {
                    "description": "The data field to apply time unit.",
                    "type": "string"
                },
                "timeUnit": {
                    "$ref": "#/definitions/TimeUnit",
                    "description": "The timeUnit."
                }
            },
            "required": [
                "timeUnit",
                "field",
                "as"
            ],
            "type": "object"
        },
        "TopLevelFacetedUnitSpec": {
            "additionalProperties": false,
            "properties": {
                "$schema": {
                    "description": "URL to JSON schema for this Vega-Lite specification.",
                    "format": "uri",
                    "type": "string"
                },
                "autoResize": {
                    "description": "Resize is a boolean indicating if autosize layout should be re-calculated on every update.\n\n__Default value__: `false`",
                    "type": "boolean"
                },
                "background": {
                    "description": "CSS color property to use as the background of visualization.\n\n__Default value:__ none (transparent)",
                    "type": "string"
                },
                "config": {
                    "$ref": "#/definitions/Config",
                    "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
                },
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "encoding": {
                    "$ref": "#/definitions/EncodingWithFacet",
                    "description": "A key-value mapping between encoding channels and definition of fields."
                },
                "height": {
                    "description": "The height of a visualization.\n\n__Default value:__\n- For y-axis with a continuous (non-ordinal) scale, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- For y-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the height is determined by the value of `rangeStep` and the cardinality of the field mapped to y-channel.   Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plot with `row` and `column` channels, this represents the height of a single cell.",
                    "type": "number"
                },
                "mark": {
                    "$ref": "#/definitions/AnyMark",
                    "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, and `\"text\"`) or a [mark definition object](mark.html#mark-def)."
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "padding": {
                    "$ref": "#/definitions/Padding",
                    "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
                },
                "selection": {
                    "additionalProperties": {
                        "$ref": "#/definitions/SelectionDef"
                    },
                    "description": "A key-value mapping between selection names and definitions.",
                    "type": "object"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                },
                "width": {
                    "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- For x-axis with a continuous (non-ordinal) scale, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- For x-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the width is determined by the value of `rangeStep` and the cardinality of the field mapped to x-channel.   Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note__: For plot with `row` and `column` channels, this represents the width of a single cell.",
                    "type": "number"
                }
            },
            "required": [
                "encoding",
                "mark"
            ],
            "type": "object"
        },
        "TopLevelFacetedSpec": {
            "additionalProperties": false,
            "properties": {
                "$schema": {
                    "description": "URL to JSON schema for this Vega-Lite specification.",
                    "format": "uri",
                    "type": "string"
                },
                "autoResize": {
                    "description": "Resize is a boolean indicating if autosize layout should be re-calculated on every update.\n\n__Default value__: `false`",
                    "type": "boolean"
                },
                "background": {
                    "description": "CSS color property to use as the background of visualization.\n\n__Default value:__ none (transparent)",
                    "type": "string"
                },
                "config": {
                    "$ref": "#/definitions/Config",
                    "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
                },
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "facet": {
                    "$ref": "#/definitions/Facet"
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "padding": {
                    "$ref": "#/definitions/Padding",
                    "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
                },
                "resolve": {
                    "$ref": "#/definitions/ResolveMapping"
                },
                "spec": {
                    "$ref": "#/definitions/Spec"
                },
                "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"
        },
        "TopLevelHConcatSpec": {
            "additionalProperties": false,
            "properties": {
                "$schema": {
                    "description": "URL to JSON schema for this Vega-Lite specification.",
                    "format": "uri",
                    "type": "string"
                },
                "autoResize": {
                    "description": "Resize is a boolean indicating if autosize layout should be re-calculated on every update.\n\n__Default value__: `false`",
                    "type": "boolean"
                },
                "background": {
                    "description": "CSS color property to use as the background of visualization.\n\n__Default value:__ none (transparent)",
                    "type": "string"
                },
                "config": {
                    "$ref": "#/definitions/Config",
                    "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
                },
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "hconcat": {
                    "items": {
                        "$ref": "#/definitions/Spec"
                    },
                    "type": "array"
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "padding": {
                    "$ref": "#/definitions/Padding",
                    "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
                },
                "resolve": {
                    "$ref": "#/definitions/ResolveMapping"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                }
            },
            "required": [
                "hconcat"
            ],
            "type": "object"
        },
        "TopLevelLayerSpec": {
            "additionalProperties": false,
            "properties": {
                "$schema": {
                    "description": "URL to JSON schema for this Vega-Lite specification.",
                    "format": "uri",
                    "type": "string"
                },
                "autoResize": {
                    "description": "Resize is a boolean indicating if autosize layout should be re-calculated on every update.\n\n__Default value__: `false`",
                    "type": "boolean"
                },
                "background": {
                    "description": "CSS color property to use as the background of visualization.\n\n__Default value:__ none (transparent)",
                    "type": "string"
                },
                "config": {
                    "$ref": "#/definitions/Config",
                    "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
                },
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "height": {
                    "description": "The height of a visualization.\n\n__Default value:__\n- For y-axis with a continuous (non-ordinal) scale, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- For y-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the height is determined by the value of `rangeStep` and the cardinality of the field mapped to y-channel.   Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.cell.height`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plot with `row` and `column` channels, this represents the height of a single cell.",
                    "type": "number"
                },
                "layer": {
                    "description": "Unit specs that will be layered.",
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/definitions/LayerSpec"
                            },
                            {
                                "$ref": "#/definitions/CompositeUnitSpec"
                            }
                        ]
                    },
                    "type": "array"
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "padding": {
                    "$ref": "#/definitions/Padding",
                    "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
                },
                "resolve": {
                    "$ref": "#/definitions/ResolveMapping"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                },
                "width": {
                    "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- For x-axis with a continuous (non-ordinal) scale, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- For x-axis with an ordinal scale: if [`rangeStep`](scale.html#ordinal) is a numeric value (default), the width is determined by the value of `rangeStep` and the cardinality of the field mapped to x-channel.   Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.cell.width`](config.html#cell-config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note__: For plot with `row` and `column` channels, this represents the width of a single cell.",
                    "type": "number"
                }
            },
            "required": [
                "layer"
            ],
            "type": "object"
        },
        "TopLevelRepeatSpec": {
            "additionalProperties": false,
            "properties": {
                "$schema": {
                    "description": "URL to JSON schema for this Vega-Lite specification.",
                    "format": "uri",
                    "type": "string"
                },
                "autoResize": {
                    "description": "Resize is a boolean indicating if autosize layout should be re-calculated on every update.\n\n__Default value__: `false`",
                    "type": "boolean"
                },
                "background": {
                    "description": "CSS color property to use as the background of visualization.\n\n__Default value:__ none (transparent)",
                    "type": "string"
                },
                "config": {
                    "$ref": "#/definitions/Config",
                    "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
                },
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "padding": {
                    "$ref": "#/definitions/Padding",
                    "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
                },
                "repeat": {
                    "$ref": "#/definitions/Repeat"
                },
                "resolve": {
                    "$ref": "#/definitions/ResolveMapping"
                },
                "spec": {
                    "$ref": "#/definitions/Spec"
                },
                "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"
        },
        "TopLevelVConcatSpec": {
            "additionalProperties": false,
            "properties": {
                "$schema": {
                    "description": "URL to JSON schema for this Vega-Lite specification.",
                    "format": "uri",
                    "type": "string"
                },
                "autoResize": {
                    "description": "Resize is a boolean indicating if autosize layout should be re-calculated on every update.\n\n__Default value__: `false`",
                    "type": "boolean"
                },
                "background": {
                    "description": "CSS color property to use as the background of visualization.\n\n__Default value:__ none (transparent)",
                    "type": "string"
                },
                "config": {
                    "$ref": "#/definitions/Config",
                    "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
                },
                "data": {
                    "$ref": "#/definitions/Data",
                    "description": "An object describing the data source"
                },
                "description": {
                    "description": "An optional description of this mark for commenting purpose.",
                    "type": "string"
                },
                "name": {
                    "description": "Name of the visualization for later reference.",
                    "type": "string"
                },
                "padding": {
                    "$ref": "#/definitions/Padding",
                    "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
                },
                "resolve": {
                    "$ref": "#/definitions/ResolveMapping"
                },
                "transform": {
                    "description": "An array of data transformations such as filter and new field calculation.",
                    "items": {
                        "$ref": "#/definitions/Transform"
                    },
                    "type": "array"
                },
                "vconcat": {
                    "items": {
                        "$ref": "#/definitions/Spec"
                    },
                    "type": "array"
                }
            },
            "required": [
                "vconcat"
            ],
            "type": "object"
        },
        "TopLevelExtendedSpec": {
            "anyOf": [
                {
                    "$ref": "#/definitions/TopLevelFacetedUnitSpec"
                },
                {
                    "$ref": "#/definitions/TopLevelLayerSpec"
                },
                {
                    "$ref": "#/definitions/TopLevelFacetedSpec"
                },
                {
                    "$ref": "#/definitions/TopLevelRepeatSpec"
                },
                {
                    "$ref": "#/definitions/TopLevelVConcatSpec"
                },
                {
                    "$ref": "#/definitions/TopLevelHConcatSpec"
                }
            ]
        },
        "TopLevelProperties": {
            "additionalProperties": false,
            "properties": {
                "autoResize": {
                    "description": "Resize is a boolean indicating if autosize layout should be re-calculated on every update.\n\n__Default value__: `false`",
                    "type": "boolean"
                },
                "background": {
                    "description": "CSS color property to use as the background of visualization.\n\n__Default value:__ none (transparent)",
                    "type": "string"
                },
                "padding": {
                    "$ref": "#/definitions/Padding",
                    "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
                }
            },
            "type": "object"
        },
        "Transform": {
            "anyOf": [
                {
                    "$ref": "#/definitions/FilterTransform"
                },
                {
                    "$ref": "#/definitions/CalculateTransform"
                },
                {
                    "$ref": "#/definitions/LookupTransform"
                },
                {
                    "$ref": "#/definitions/BinTransform"
                },
                {
                    "$ref": "#/definitions/TimeUnitTransform"
                },
                {
                    "$ref": "#/definitions/SummarizeTransform"
                }
            ]
        },
        "Type": {
            "description": "Constants and utilities for data type  \n Data type based on level of measurement ",
            "enum": [
                "quantitative",
                "ordinal",
                "temporal",
                "nominal"
            ],
            "type": "string"
        },
        "UrlData": {
            "additionalProperties": false,
            "properties": {
                "format": {
                    "$ref": "#/definitions/DataUrlFormat",
                    "description": "Data format properties"
                },
                "url": {
                    "description": "An URL from which to load the data set. Use the `format.type` property\nto ensure the loaded data is correctly parsed.",
                    "type": "string"
                }
            },
            "required": [
                "url"
            ],
            "type": "object"
        },
        "VLOnlyConfig": {
            "additionalProperties": false,
            "properties": {
                "cell": {
                    "$ref": "#/definitions/CellConfig",
                    "description": "Cell Config "
                },
                "countTitle": {
                    "description": "Default axis and legend title for count fields.\n\n__Default value:__ `'Number of Records'`.",
                    "type": "string"
                },
                "invalidValues": {
                    "description": "Defines how Vega-Lite should handle invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values are filtered.\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
                    "enum": [
                        "filter"
                    ],
                    "type": "string"
                },
                "numberFormat": {
                    "description": "D3 Number format for axis labels and text tables. For example \"s\" for SI units.(in the form of [D3 number format pattern](https://github.com/mbostock/d3/wiki/Formatting)).\n\n__Default value:__ `\"s\"` (except for text marks that encode a count field, the default value is `\"d\"`).",
                    "type": "string"
                },
                "scale": {
                    "$ref": "#/definitions/ScaleConfig",
                    "description": "Scale Config "
                },
                "selection": {
                    "$ref": "#/definitions/SelectionConfig",
                    "description": "Selection Config "
                },
                "stack": {
                    "$ref": "#/definitions/StackOffset",
                    "description": "Default stack offset for stackable mark. "
                },
                "timeFormat": {
                    "description": "Default datetime format for axis and legend labels. The format can be set directly on each axis and legend. [D3 time format pattern](https://github.com/mbostock/d3/wiki/Time-Formatting)).\n\n__Default value:__ `'%b %d, %Y'`.",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "TextValueDef": {
            "additionalProperties": false,
            "description": "Definition object for a constant value of an encoding channel.",
            "properties": {
                "value": {
                    "description": "A constant value in visual domain.",
                    "type": [
                        "string",
                        "number",
                        "boolean"
                    ]
                }
            },
            "required": [
                "value"
            ],
            "type": "object"
        },
        "ValueDef": {
            "additionalProperties": false,
            "description": "Definition object for a constant value of an encoding channel.",
            "properties": {
                "value": {
                    "description": "A constant value in visual domain."
                }
            },
            "required": [
                "value"
            ],
            "type": "object"
        },
        "NumberValueDef": {
            "additionalProperties": false,
            "description": "Definition object for a constant value of an encoding channel.",
            "properties": {
                "value": {
                    "description": "A constant value in visual domain.",
                    "type": "number"
                }
            },
            "required": [
                "value"
            ],
            "type": "object"
        },
        "StringValueDef": {
            "additionalProperties": false,
            "description": "Definition object for a constant value of an encoding channel.",
            "properties": {
                "value": {
                    "description": "A constant value in visual domain.",
                    "type": "string"
                }
            },
            "required": [
                "value"
            ],
            "type": "object"
        },
        "VerticalAlign": {
            "enum": [
                "top",
                "middle",
                "bottom"
            ],
            "type": "string"
        },
        "VgAxisBase": {
            "additionalProperties": false,
            "description": "Base object for Vega's Axis and Axis Config.\nAll of these properties are both properties of Vega's Axis and Axis Config.",
            "properties": {
                "domain": {
                    "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis (default true).",
                    "type": "boolean"
                },
                "grid": {
                    "description": "A boolean flag indicating if grid lines should be included as part of the axis\n\n__Default value:__ `true` for (1) quantitative fields that are not binned and (2) time fields;  otherwise, `\"false\"`.",
                    "type": "boolean"
                },
                "labelAngle": {
                    "description": "The rotation angle of the axis labels.\n\n__Default value:__ `-45` for time or ordinal axis and `0` otherwise.",
                    "maximum": 360,
                    "minimum": -360,
                    "type": "number"
                },
                "labelOverlap": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "enum": [
                                "parity"
                            ],
                            "type": "string"
                        },
                        {
                            "enum": [
                                "greedy"
                            ],
                            "type": "string"
                        }
                    ],
                    "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 x-axes with horizontal labels, otherwise `false`."
                },
                "labels": {
                    "description": "A boolean flag indicating if labels should be included as part of the axis (default true).\n\n__Default value:__  derived from [axis config](config.html#axis-config)'s `labels` (`true` by default).",
                    "type": "boolean"
                },
                "maxExtent": {
                    "description": "The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles.\n\n__Default value:__ `undefined`.",
                    "type": "number"
                },
                "minExtent": {
                    "description": "The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles.\n\n__Default value:__ `30`",
                    "type": "number"
                },
                "tickExtra": {
                    "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPostion\": 1` and an axis `\"padding\"` value of `0`.",
                    "type": "boolean"
                },
                "tickSize": {
                    "description": "The size, in pixels, of major, minor and end ticks.\n\n__Default value:__  derived from [axis config](config.html#axis-config)'s `tickSize` (`6` by default).",
                    "minimum": 0,
                    "type": "number"
                },
                "ticks": {
                    "description": "Boolean value that determines whether the axis should include ticks.",
                    "type": "boolean"
                },
                "titleAlign": {
                    "description": "Horizontal text alignment of axis titles.",
                    "type": "string"
                },
                "titleAngle": {
                    "description": "Angle in degrees of axis titles.",
                    "type": "number"
                },
                "titleMaxLength": {
                    "description": "Max length for axis title if the title is automatically generated from the field's description. By default, this is automatically based on cell size and characterWidth property.\n\n__Default value:__  automatically determined based on the cell size (`config.cell.width`, `config.cell.height`)",
                    "minimum": 0,
                    "type": "number"
                },
                "titlePadding": {
                    "description": "The padding, in pixels, between title and axis.",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "VgAxisConfig": {
            "additionalProperties": false,
            "properties": {
                "bandPosition": {
                    "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.",
                    "type": "number"
                },
                "domain": {
                    "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis (default true).",
                    "type": "boolean"
                },
                "domainColor": {
                    "description": "Color of axis domain line.\n\n__Default value:__  (none, using Vega default).",
                    "type": "string"
                },
                "domainWidth": {
                    "description": "Stroke width of axis domain line\n\n__Default value:__  (none, using Vega default).",
                    "type": "number"
                },
                "grid": {
                    "description": "A boolean flag indicating if grid lines should be included as part of the axis\n\n__Default value:__ `true` for (1) quantitative fields that are not binned and (2) time fields;  otherwise, `\"false\"`.",
                    "type": "boolean"
                },
                "gridColor": {
                    "description": "Color of gridlines.",
                    "type": "string"
                },
                "gridDash": {
                    "description": "The offset (in pixels) into which to begin drawing with the grid dash array.",
                    "items": {
                        "type": "number"
                    },
                    "minimum": 0,
                    "type": "array"
                },
                "gridOpacity": {
                    "description": "The stroke opacity of grid (value between [0,1])\n\n__Default value:__ (`1` by default)",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "gridWidth": {
                    "description": "The grid width, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "labelAngle": {
                    "description": "The rotation angle of the axis labels.\n\n__Default value:__ `-45` for time or ordinal axis and `0` otherwise.",
                    "maximum": 360,
                    "minimum": -360,
                    "type": "number"
                },
                "labelColor": {
                    "description": "The color of the tick label, can be in hex color code or regular color name.",
                    "type": "string"
                },
                "labelFont": {
                    "description": "The font of the tick label.",
                    "type": "string"
                },
                "labelFontSize": {
                    "description": "The font size of the label, in pixels.\n\n__Default value:__ `10`.",
                    "minimum": 0,
                    "type": "number"
                },
                "labelLimit": {
                    "description": "Maximum allowed pixel width of axis tick labels.",
                    "type": "number"
                },
                "labelOverlap": {
                    "anyOf": [
                        {
                            "type": "boolean"
                        },
                        {
                            "enum": [
                                "parity"
                            ],
                            "type": "string"
                        },
                        {
                            "enum": [
                                "greedy"
                            ],
                            "type": "string"
                        }
                    ],
                    "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 x-axes with horizontal labels, otherwise `false`."
                },
                "labelPadding": {
                    "description": "Padding in pixels between axis ticks and tick labels.",
                    "type": "number"
                },
                "labels": {
                    "description": "A boolean flag indicating if labels should be included as part of the axis (default true).\n\n__Default value:__  derived from [axis config](config.html#axis-config)'s `labels` (`true` by default).",
                    "type": "boolean"
                },
                "maxExtent": {
                    "description": "The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles.\n\n__Default value:__ `undefined`.",
                    "type": "number"
                },
                "minExtent": {
                    "description": "The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles.\n\n__Default value:__ `30`",
                    "type": "number"
                },
                "tickColor": {
                    "description": "The color of the axis's tick.",
                    "type": "string"
                },
                "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 `\"bandPostion\": 1` and an axis `\"padding\"` value of `0`.",
                    "type": "boolean"
                },
                "tickRound": {
                    "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.",
                    "type": "boolean"
                },
                "tickSize": {
                    "description": "The size, in pixels, of major, minor and end ticks.\n\n__Default value:__  derived from [axis config](config.html#axis-config)'s `tickSize` (`6` by default).",
                    "minimum": 0,
                    "type": "number"
                },
                "tickWidth": {
                    "description": "The width, in pixels, of ticks.",
                    "minimum": 0,
                    "type": "number"
                },
                "ticks": {
                    "description": "Boolean value that determines whether the axis should include ticks.",
                    "type": "boolean"
                },
                "titleAlign": {
                    "description": "Horizontal text alignment of axis titles.",
                    "type": "string"
                },
                "titleAngle": {
                    "description": "Angle in degrees of axis titles.",
                    "type": "number"
                },
                "titleBaseline": {
                    "description": "Vertical text baseline for axis titles.",
                    "type": "string"
                },
                "titleColor": {
                    "description": "Color of the title, can be in hex color code or regular color name.",
                    "type": "string"
                },
                "titleFont": {
                    "description": "Font of the title. (e.g., `\"Helvetica Neue\"`).",
                    "type": "string"
                },
                "titleFontSize": {
                    "description": "Font size of the title.\n\n__Default value:__ `10`.",
                    "minimum": 0,
                    "type": "number"
                },
                "titleFontWeight": {
                    "description": "Font weight of the title. (e.g., `\"bold\"`).",
                    "type": [
                        "string",
                        "number"
                    ]
                },
                "titleLimit": {
                    "description": "Maximum allowed pixel width of axis titles.",
                    "type": "number"
                },
                "titleMaxLength": {
                    "description": "Max length for axis title if the title is automatically generated from the field's description. By default, this is automatically based on cell size and characterWidth property.\n\n__Default value:__  automatically determined based on the cell size (`config.cell.width`, `config.cell.height`)",
                    "minimum": 0,
                    "type": "number"
                },
                "titlePadding": {
                    "description": "The padding, in pixels, between title and axis.",
                    "type": "number"
                },
                "titleX": {
                    "description": "X-coordinate of the axis title relative to the axis group.",
                    "type": "number"
                },
                "titleY": {
                    "description": "Y-coordinate of the axis title relative to the axis group.",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "VgBinding": {
            "anyOf": [
                {
                    "$ref": "#/definitions/VgCheckboxBinding"
                },
                {
                    "$ref": "#/definitions/VgRadioBinding"
                },
                {
                    "$ref": "#/definitions/VgSelectBinding"
                },
                {
                    "$ref": "#/definitions/VgRangeBinding"
                },
                {
                    "$ref": "#/definitions/VgGenericBinding"
                }
            ]
        },
        "VgCheckboxBinding": {
            "additionalProperties": false,
            "properties": {
                "element": {
                    "type": "string"
                },
                "input": {
                    "enum": [
                        "checkbox"
                    ],
                    "type": "string"
                }
            },
            "required": [
                "input"
            ],
            "type": "object"
        },
        "VgGenericBinding": {
            "additionalProperties": false,
            "properties": {
                "element": {
                    "type": "string"
                },
                "input": {
                    "type": "string"
                }
            },
            "required": [
                "input"
            ],
            "type": "object"
        },
        "VgLegendBase": {
            "additionalProperties": false,
            "properties": {
                "entryPadding": {
                    "description": "Padding (in pixels) between legend entries in a symbol legend.",
                    "type": "number"
                },
                "fillColor": {
                    "description": "Background fill color for the full legend.",
                    "type": "string"
                },
                "offset": {
                    "description": "The offset, in pixels, by which to displace the legend from the edge of the enclosing group or data rectangle.\n\n__Default value:__  `0`",
                    "type": "number"
                },
                "orient": {
                    "$ref": "#/definitions/LegendOrient",
                    "description": "The orientation of the legend. One of `\"left\"` or `\"right\"`. This determines how the legend is positioned within the scene. The default is `\"right\"`.\n\n__Default value:__  `\"right\"`"
                },
                "padding": {
                    "description": "The padding, in pixels, between the legend and axis.",
                    "type": "number"
                },
                "titleAlign": {
                    "description": "Horizontal text alignment for legend titles.",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "VgLegendConfig": {
            "additionalProperties": false,
            "properties": {
                "cornerRadius": {
                    "description": "Corner radius for the full legend.",
                    "type": "number"
                },
                "entryPadding": {
                    "description": "Padding (in pixels) between legend entries in a symbol legend.",
                    "type": "number"
                },
                "fillColor": {
                    "description": "Background fill color for the full legend.",
                    "type": "string"
                },
                "gradientHeight": {
                    "description": "The height of the gradient, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "gradientLabelBaseline": {
                    "description": "Text baseline for color ramp gradient labels.",
                    "type": "string"
                },
                "gradientLabelLimit": {
                    "description": "The maximum allowed length in pixels of color ramp gradient labels.",
                    "type": "number"
                },
                "gradientLabelOffset": {
                    "description": "Vertical offset in pixels for color ramp gradient labels.",
                    "type": "number"
                },
                "gradientStrokeColor": {
                    "description": "The color of the gradient stroke, can be in hex color code or regular color name.",
                    "type": "string"
                },
                "gradientStrokeWidth": {
                    "description": "The width of the gradient stroke, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "gradientWidth": {
                    "description": "The width of the gradient, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "labelAlign": {
                    "description": "The alignment of the legend label, can be left, middle or right.",
                    "type": "string"
                },
                "labelBaseline": {
                    "description": "The position of the baseline of legend label, can be top, middle or bottom.",
                    "type": "string"
                },
                "labelColor": {
                    "description": "The color of the legend label, can be in hex color code or regular color name.",
                    "type": "string"
                },
                "labelFont": {
                    "description": "The font of the legend label.",
                    "type": "string"
                },
                "labelFontSize": {
                    "description": "The font size of legend label.\n\n__Default value:__ `10`.",
                    "minimum": 0,
                    "type": "number"
                },
                "labelLimit": {
                    "description": "Maximum allowed pixel width of axis tick labels.",
                    "type": "number"
                },
                "labelOffset": {
                    "description": "The offset of the legend label.",
                    "minimum": 0,
                    "type": "number"
                },
                "offset": {
                    "description": "The offset, in pixels, by which to displace the legend from the edge of the enclosing group or data rectangle.\n\n__Default value:__  `0`",
                    "type": "number"
                },
                "orient": {
                    "$ref": "#/definitions/LegendOrient",
                    "description": "The orientation of the legend. One of `\"left\"` or `\"right\"`. This determines how the legend is positioned within the scene. The default is `\"right\"`.\n\n__Default value:__  `\"right\"`"
                },
                "padding": {
                    "description": "The padding, in pixels, between the legend and axis.",
                    "type": "number"
                },
                "strokeColor": {
                    "description": "Border stroke color for the full legend.",
                    "type": "string"
                },
                "strokeDash": {
                    "description": "Border stroke dash pattern for the full legend.",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "strokeWidth": {
                    "description": "Border stroke width for the full legend.",
                    "type": "number"
                },
                "symbolColor": {
                    "description": "The color of the legend symbol,",
                    "type": "string"
                },
                "symbolSize": {
                    "description": "The size of the legend symbol, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "symbolStrokeWidth": {
                    "description": "The width of the symbol's stroke.",
                    "minimum": 0,
                    "type": "number"
                },
                "symbolType": {
                    "description": "Default shape type (such as \"circle\") for legend symbols.",
                    "type": "string"
                },
                "titleAlign": {
                    "description": "Horizontal text alignment for legend titles.",
                    "type": "string"
                },
                "titleBaseline": {
                    "description": "Optional mark property definitions for custom legend styling. \n Vertical text baseline for legend titles.",
                    "type": "string"
                },
                "titleColor": {
                    "description": "The color of the legend title, can be in hex color code or regular color name.",
                    "type": "string"
                },
                "titleFont": {
                    "description": "The font of the legend title.",
                    "type": "string"
                },
                "titleFontSize": {
                    "description": "The font size of the legend title.",
                    "type": "number"
                },
                "titleFontWeight": {
                    "description": "The font weight of the legend title.",
                    "type": [
                        "string",
                        "number"
                    ]
                },
                "titleLimit": {
                    "description": "Maximum allowed pixel width of axis titles.",
                    "type": "number"
                },
                "titlePadding": {
                    "description": "The padding, in pixels, between title and legend.",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "VgMarkConfig": {
            "additionalProperties": false,
            "properties": {
                "align": {
                    "$ref": "#/definitions/HorizontalAlign",
                    "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
                },
                "angle": {
                    "description": "The rotation angle of the text, in degrees.",
                    "maximum": 360,
                    "minimum": 0,
                    "type": "number"
                },
                "baseline": {
                    "$ref": "#/definitions/VerticalAlign",
                    "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
                },
                "dx": {
                    "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
                    "type": "number"
                },
                "dy": {
                    "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
                    "type": "number"
                },
                "fill": {
                    "description": "Default Fill Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "fillOpacity": {
                    "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "font": {
                    "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
                    "minimum": 0,
                    "type": "string"
                },
                "fontSize": {
                    "description": "The font size, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "fontStyle": {
                    "$ref": "#/definitions/FontStyle",
                    "description": "The font style (e.g., `\"italic\"`)."
                },
                "fontWeight": {
                    "anyOf": [
                        {
                            "$ref": "#/definitions/FontWeight"
                        },
                        {
                            "$ref": "#/definitions/FontWeightNumber"
                        }
                    ],
                    "description": "The font weight (e.g., `\"bold\"`)."
                },
                "interpolate": {
                    "$ref": "#/definitions/Interpolate",
                    "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
                },
                "opacity": {
                    "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "orient": {
                    "$ref": "#/definitions/Orient",
                    "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
                },
                "radius": {
                    "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
                    "minimum": 0,
                    "type": "number"
                },
                "shape": {
                    "description": "The default symbol shape to use. One of: `\"circle\"` (default), `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, or `\"triangle-down\"`, or a custom SVG path.\n\n__Default value:__ `\"circle\"`",
                    "type": "string"
                },
                "size": {
                    "description": "The pixel area each the point/circle/square.\nFor example: in the case of circles, the radius is determined in part by the square root of the size value.\n\n__Default value:__ `30`",
                    "minimum": 0,
                    "type": "number"
                },
                "stroke": {
                    "description": "Default Stroke Color.  This has higher precedence than config.color\n\n__Default value:__ (None)",
                    "type": "string"
                },
                "strokeDash": {
                    "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "strokeDashOffset": {
                    "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
                    "type": "number"
                },
                "strokeOpacity": {
                    "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "strokeWidth": {
                    "description": "The stroke width, in pixels.",
                    "minimum": 0,
                    "type": "number"
                },
                "tension": {
                    "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
                    "maximum": 1,
                    "minimum": 0,
                    "type": "number"
                },
                "text": {
                    "description": "Placeholder text if the `text` channel is not specified",
                    "type": "string"
                },
                "theta": {
                    "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
                    "type": "number"
                }
            },
            "type": "object"
        },
        "VgRadioBinding": {
            "additionalProperties": false,
            "properties": {
                "element": {
                    "type": "string"
                },
                "input": {
                    "enum": [
                        "radio"
                    ],
                    "type": "string"
                },
                "options": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "required": [
                "input",
                "options"
            ],
            "type": "object"
        },
        "VgRangeBinding": {
            "additionalProperties": false,
            "properties": {
                "element": {
                    "type": "string"
                },
                "input": {
                    "enum": [
                        "range"
                    ],
                    "type": "string"
                },
                "max": {
                    "type": "number"
                },
                "min": {
                    "type": "number"
                },
                "step": {
                    "type": "number"
                }
            },
            "required": [
                "input"
            ],
            "type": "object"
        },
        "VgRangeScheme": {
            "additionalProperties": false,
            "properties": {
                "count": {
                    "type": "number"
                },
                "extent": {
                    "items": {
                        "type": "number"
                    },
                    "type": "array"
                },
                "scheme": {
                    "type": "string"
                }
            },
            "required": [
                "scheme"
            ],
            "type": "object"
        },
        "VgSelectBinding": {
            "additionalProperties": false,
            "properties": {
                "element": {
                    "type": "string"
                },
                "input": {
                    "enum": [
                        "select"
                    ],
                    "type": "string"
                },
                "options": {
                    "items": {
                        "type": "string"
                    },
                    "type": "array"
                }
            },
            "required": [
                "input",
                "options"
            ],
            "type": "object"
        },
        "VgTitleConfig": {
            "additionalProperties": false,
            "properties": {
                "anchor": {
                    "description": "Title anchor position (`\"start\"`, `\"middle\"`, or `\"end\"`).",
                    "type": "string"
                },
                "angle": {
                    "description": "Angle in degrees of title text.",
                    "type": "number"
                },
                "baseline": {
                    "description": "Vertical text baseline for title text.",
                    "type": "string"
                },
                "color": {
                    "description": "Text color for title text.",
                    "type": "string"
                },
                "font": {
                    "description": "Font name for title text.",
                    "type": "string"
                },
                "fontSize": {
                    "description": "Font size in pixels for title text.\n\n__Default value:__ `10`.",
                    "minimum": 0,
                    "type": "number"
                },
                "fontWeight": {
                    "description": "Font weight for title text.",
                    "type": [
                        "string",
                        "number"
                    ]
                },
                "limit": {
                    "description": "The maximum allowed length in pixels of legend labels.",
                    "minimum": 0,
                    "type": "number"
                },
                "offset": {
                    "description": "Offset in pixels of the title from the chart body and axes.",
                    "type": "number"
                },
                "orient": {
                    "description": "Default title orientation (\"top\", \"bottom\", \"left\", or \"right\")",
                    "type": "string"
                }
            },
            "type": "object"
        },
        "VlOnlyGuideConfig": {
            "additionalProperties": false,
            "properties": {
                "shortTimeLabels": {
                    "description": "Whether month names and weekday names should be abbreviated.\n\n__Default value:__  `false`",
                    "type": "boolean"
                }
            },
            "type": "object"
        }
    }
}