{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "description": "Schema for Vega-lite specification",
    "type": "object",
    "required": [
        "marktype",
        "encoding"
    ],
    "properties": {
        "data": {
            "type": "object",
            "properties": {
                "formatType": {
                    "type": "string",
                    "enum": [
                        "json",
                        "csv",
                        "tsv"
                    ],
                    "default": "json"
                },
                "url": {
                    "type": "string"
                },
                "values": {
                    "type": "array",
                    "description": "Pass array of objects instead of a url to a file.",
                    "items": {
                        "type": "object",
                        "additionalProperties": true
                    }
                },
                "filter": {
                    "type": "string",
                    "description": "A string containing the filter Vega expression. Use `datum` to refer to the current data object."
                },
                "calculate": {
                    "type": "array",
                    "description": "Calculate new field(s) using the provided expresssion(s). Calculation are applied before filter.",
                    "items": {
                        "type": "object",
                        "properties": {
                            "field": {
                                "type": "string",
                                "description": "The field in which to store the computed formula value."
                            },
                            "expr": {
                                "type": "string",
                                "description": "A string containing an expression for the formula. Use the variable `datum` to to refer to the current data object."
                            }
                        }
                    }
                }
            }
        },
        "marktype": {
            "type": "string",
            "enum": [
                "point",
                "tick",
                "bar",
                "line",
                "area",
                "circle",
                "square",
                "text"
            ]
        },
        "encoding": {
            "type": "object",
            "properties": {
                "x": {
                    "type": "object",
                    "properties": {
                        "field": {
                            "type": "string"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "nominal",
                                "ordinal",
                                "quantitative",
                                "temporal"
                            ]
                        },
                        "timeUnit": {
                            "type": "string",
                            "enum": [
                                "year",
                                "month",
                                "day",
                                "date",
                                "hours",
                                "minutes",
                                "seconds"
                            ],
                            "supportedTypes": {
                                "temporal": 1
                            }
                        },
                        "bin": {
                            "type": [
                                "boolean",
                                "object"
                            ],
                            "default": false,
                            "properties": {
                                "maxbins": {
                                    "type": "integer",
                                    "default": 15,
                                    "minimum": 2,
                                    "description": "Maximum number of bins."
                                }
                            },
                            "supportedTypes": {
                                "quantitative": 1
                            }
                        },
                        "aggregate": {
                            "type": "string",
                            "enum": [
                                "values",
                                "count",
                                "valid",
                                "missing",
                                "distinct",
                                "sum",
                                "mean",
                                "average",
                                "variance",
                                "variancep",
                                "stdev",
                                "stdevp",
                                "median",
                                "q1",
                                "q3",
                                "modeskew",
                                "min",
                                "max",
                                "argmin",
                                "argmax"
                            ],
                            "supportedEnums": {
                                "quantitative": [
                                    "values",
                                    "count",
                                    "valid",
                                    "missing",
                                    "distinct",
                                    "sum",
                                    "mean",
                                    "average",
                                    "variance",
                                    "variancep",
                                    "stdev",
                                    "stdevp",
                                    "median",
                                    "q1",
                                    "q3",
                                    "modeskew",
                                    "min",
                                    "max",
                                    "argmin",
                                    "argmax"
                                ],
                                "ordinal": [
                                    "median",
                                    "min",
                                    "max"
                                ],
                                "nominal": [],
                                "temporal": [
                                    "mean",
                                    "median",
                                    "min",
                                    "max"
                                ],
                                "": [
                                    "count"
                                ]
                            },
                            "supportedTypes": {
                                "quantitative": 1,
                                "nominal": 1,
                                "ordinal": 1,
                                "temporal": 1,
                                "": 1
                            }
                        },
                        "scale": {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string",
                                    "enum": [
                                        "linear",
                                        "log",
                                        "pow",
                                        "sqrt",
                                        "quantile"
                                    ],
                                    "default": "linear",
                                    "supportedTypes": {
                                        "quantitative": 1
                                    }
                                },
                                "domain": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. The domain may also be specified by a reference to a data source."
                                },
                                "range": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. For ordinal scales only, the range can be defined using a DataRef: the range values are then drawn dynamically from a backing data set."
                                },
                                "round": {
                                    "type": "boolean",
                                    "description": "If true, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid."
                                },
                                "bandWidth": {
                                    "type": "integer",
                                    "minimum": 0
                                },
                                "outerPadding": {
                                    "type": "number"
                                },
                                "padding": {
                                    "type": "number",
                                    "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 range band width will be equal to the padding width. For more, see the [D3 ordinal scale documentation](https://github.com/mbostock/d3/wiki/Ordinal-Scales)."
                                },
                                "points": {
                                    "type": "boolean",
                                    "description": "If true, distributes the ordinal values over a quantitative range at uniformly spaced points. The spacing of the points can be adjusted using the padding property. If false, the ordinal scale will construct evenly-spaced bands, rather than points."
                                },
                                "clamp": {
                                    "type": "boolean",
                                    "default": true,
                                    "description": "If true, values that exceed the data domain are clamped to either the minimum or maximum range value"
                                },
                                "nice": {
                                    "oneOf": [
                                        {
                                            "type": "boolean",
                                            "description": "If true, modifies the scale domain to use a more human-friendly number range (e.g., 7 instead of 6.96)."
                                        },
                                        {
                                            "type": "string",
                                            "enum": [
                                                "second",
                                                "minute",
                                                "hour",
                                                "day",
                                                "week",
                                                "month",
                                                "year"
                                            ],
                                            "description": "If specified, 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; legal values are \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", or \"year\"."
                                        }
                                    ],
                                    "supportedTypes": {
                                        "quantitative": 1,
                                        "temporal": 1
                                    },
                                    "description": ""
                                },
                                "exponent": {
                                    "type": "number",
                                    "description": "Sets the exponent of the scale transformation. For pow scale types only, otherwise ignored."
                                },
                                "zero": {
                                    "type": "boolean",
                                    "description": "If true, ensures that a zero baseline value is included in the scale domain. This option is ignored for non-quantitative scales.",
                                    "supportedTypes": {
                                        "quantitative": 1,
                                        "temporal": 1
                                    }
                                },
                                "useRawDomain": {
                                    "type": "boolean",
                                    "description": "Uses the source data range as scale domain instead of aggregated data for aggregate axis. This option does not work with sum or count aggregateas they might have a substantially larger scale range.By default, use value from config.useRawDomain."
                                }
                            }
                        },
                        "axis": {
                            "type": "object",
                            "properties": {
                                "format": {
                                    "type": "string",
                                    "description": "The formatting pattern for axis labels. If not undefined, this will be determined by the max value of the field."
                                },
                                "grid": {
                                    "type": "boolean",
                                    "description": "A flag indicate if gridlines should be created in addition to ticks. If `grid` is unspecified, the default value is `true` for ROW and COL. For X and Y, the default value is `true` for quantitative and time fields and `false` otherwise."
                                },
                                "layer": {
                                    "type": "string",
                                    "description": "A string indicating if the axis (and any gridlines) should be placed above or below the data marks."
                                },
                                "orient": {
                                    "type": "string",
                                    "enum": [
                                        "top",
                                        "right",
                                        "left",
                                        "bottom"
                                    ],
                                    "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)."
                                },
                                "ticks": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "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."
                                },
                                "title": {
                                    "type": "string",
                                    "description": "A title for the axis. (Shows field name and its function by default.)"
                                },
                                "labelMaxLength": {
                                    "type": "integer",
                                    "default": 25,
                                    "minimum": 0,
                                    "description": "Truncate labels that are too long."
                                },
                                "titleMaxLength": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "description": "Max length for axis title if the title is automatically generated from the field's description"
                                },
                                "titleOffset": {
                                    "type": "integer",
                                    "description": "A title offset value for the axis."
                                },
                                "properties": {
                                    "type": "object",
                                    "description": "Optional mark property definitions for custom axis styling."
                                }
                            }
                        },
                        "sort": {
                            "default": "ascending",
                            "supportedTypes": {
                                "quantitative": 1,
                                "ordinal": 1
                            },
                            "oneOf": [
                                {
                                    "type": "string",
                                    "enum": [
                                        "ascending",
                                        "descending",
                                        "unsorted"
                                    ]
                                },
                                {
                                    "type": "object",
                                    "required": [
                                        "field",
                                        "op"
                                    ],
                                    "properties": {
                                        "field": {
                                            "type": "string",
                                            "description": "The field name to aggregate over."
                                        },
                                        "op": {
                                            "type": "string",
                                            "enum": [
                                                "values",
                                                "count",
                                                "valid",
                                                "missing",
                                                "distinct",
                                                "sum",
                                                "mean",
                                                "average",
                                                "variance",
                                                "variancep",
                                                "stdev",
                                                "stdevp",
                                                "median",
                                                "q1",
                                                "q3",
                                                "modeskew",
                                                "min",
                                                "max",
                                                "argmin",
                                                "argmax"
                                            ],
                                            "description": "The field name to aggregate over."
                                        },
                                        "order": {
                                            "type": "string",
                                            "enum": [
                                                "ascending",
                                                "descending"
                                            ]
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "required": [
                        "field",
                        "type"
                    ],
                    "supportedMarktypes": {
                        "point": true,
                        "tick": true,
                        "bar": true,
                        "line": true,
                        "area": true,
                        "circle": true,
                        "square": true
                    }
                },
                "y": {
                    "type": "object",
                    "properties": {
                        "field": {
                            "type": "string"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "nominal",
                                "ordinal",
                                "quantitative",
                                "temporal"
                            ]
                        },
                        "timeUnit": {
                            "type": "string",
                            "enum": [
                                "year",
                                "month",
                                "day",
                                "date",
                                "hours",
                                "minutes",
                                "seconds"
                            ],
                            "supportedTypes": {
                                "temporal": 1
                            }
                        },
                        "bin": {
                            "type": [
                                "boolean",
                                "object"
                            ],
                            "default": false,
                            "properties": {
                                "maxbins": {
                                    "type": "integer",
                                    "default": 15,
                                    "minimum": 2,
                                    "description": "Maximum number of bins."
                                }
                            },
                            "supportedTypes": {
                                "quantitative": 1
                            }
                        },
                        "aggregate": {
                            "type": "string",
                            "enum": [
                                "values",
                                "count",
                                "valid",
                                "missing",
                                "distinct",
                                "sum",
                                "mean",
                                "average",
                                "variance",
                                "variancep",
                                "stdev",
                                "stdevp",
                                "median",
                                "q1",
                                "q3",
                                "modeskew",
                                "min",
                                "max",
                                "argmin",
                                "argmax"
                            ],
                            "supportedEnums": {
                                "quantitative": [
                                    "values",
                                    "count",
                                    "valid",
                                    "missing",
                                    "distinct",
                                    "sum",
                                    "mean",
                                    "average",
                                    "variance",
                                    "variancep",
                                    "stdev",
                                    "stdevp",
                                    "median",
                                    "q1",
                                    "q3",
                                    "modeskew",
                                    "min",
                                    "max",
                                    "argmin",
                                    "argmax"
                                ],
                                "ordinal": [
                                    "median",
                                    "min",
                                    "max"
                                ],
                                "nominal": [],
                                "temporal": [
                                    "mean",
                                    "median",
                                    "min",
                                    "max"
                                ],
                                "": [
                                    "count"
                                ]
                            },
                            "supportedTypes": {
                                "quantitative": 1,
                                "nominal": 1,
                                "ordinal": 1,
                                "temporal": 1,
                                "": 1
                            }
                        },
                        "scale": {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string",
                                    "enum": [
                                        "linear",
                                        "log",
                                        "pow",
                                        "sqrt",
                                        "quantile"
                                    ],
                                    "default": "linear",
                                    "supportedTypes": {
                                        "quantitative": 1
                                    }
                                },
                                "domain": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. The domain may also be specified by a reference to a data source."
                                },
                                "range": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. For ordinal scales only, the range can be defined using a DataRef: the range values are then drawn dynamically from a backing data set."
                                },
                                "round": {
                                    "type": "boolean",
                                    "description": "If true, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid."
                                },
                                "bandWidth": {
                                    "type": "integer",
                                    "minimum": 0
                                },
                                "outerPadding": {
                                    "type": "number"
                                },
                                "padding": {
                                    "type": "number",
                                    "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 range band width will be equal to the padding width. For more, see the [D3 ordinal scale documentation](https://github.com/mbostock/d3/wiki/Ordinal-Scales)."
                                },
                                "points": {
                                    "type": "boolean",
                                    "description": "If true, distributes the ordinal values over a quantitative range at uniformly spaced points. The spacing of the points can be adjusted using the padding property. If false, the ordinal scale will construct evenly-spaced bands, rather than points."
                                },
                                "clamp": {
                                    "type": "boolean",
                                    "default": true,
                                    "description": "If true, values that exceed the data domain are clamped to either the minimum or maximum range value"
                                },
                                "nice": {
                                    "oneOf": [
                                        {
                                            "type": "boolean",
                                            "description": "If true, modifies the scale domain to use a more human-friendly number range (e.g., 7 instead of 6.96)."
                                        },
                                        {
                                            "type": "string",
                                            "enum": [
                                                "second",
                                                "minute",
                                                "hour",
                                                "day",
                                                "week",
                                                "month",
                                                "year"
                                            ],
                                            "description": "If specified, 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; legal values are \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", or \"year\"."
                                        }
                                    ],
                                    "supportedTypes": {
                                        "quantitative": 1,
                                        "temporal": 1
                                    },
                                    "description": ""
                                },
                                "exponent": {
                                    "type": "number",
                                    "description": "Sets the exponent of the scale transformation. For pow scale types only, otherwise ignored."
                                },
                                "zero": {
                                    "type": "boolean",
                                    "description": "If true, ensures that a zero baseline value is included in the scale domain. This option is ignored for non-quantitative scales.",
                                    "supportedTypes": {
                                        "quantitative": 1,
                                        "temporal": 1
                                    }
                                },
                                "useRawDomain": {
                                    "type": "boolean",
                                    "description": "Uses the source data range as scale domain instead of aggregated data for aggregate axis. This option does not work with sum or count aggregateas they might have a substantially larger scale range.By default, use value from config.useRawDomain."
                                }
                            }
                        },
                        "axis": {
                            "type": "object",
                            "properties": {
                                "format": {
                                    "type": "string",
                                    "description": "The formatting pattern for axis labels. If not undefined, this will be determined by the max value of the field."
                                },
                                "grid": {
                                    "type": "boolean",
                                    "description": "A flag indicate if gridlines should be created in addition to ticks. If `grid` is unspecified, the default value is `true` for ROW and COL. For X and Y, the default value is `true` for quantitative and time fields and `false` otherwise."
                                },
                                "layer": {
                                    "type": "string",
                                    "description": "A string indicating if the axis (and any gridlines) should be placed above or below the data marks."
                                },
                                "orient": {
                                    "type": "string",
                                    "enum": [
                                        "top",
                                        "right",
                                        "left",
                                        "bottom"
                                    ],
                                    "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)."
                                },
                                "ticks": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "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."
                                },
                                "title": {
                                    "type": "string",
                                    "description": "A title for the axis. (Shows field name and its function by default.)"
                                },
                                "labelMaxLength": {
                                    "type": "integer",
                                    "default": 25,
                                    "minimum": 0,
                                    "description": "Truncate labels that are too long."
                                },
                                "titleMaxLength": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "description": "Max length for axis title if the title is automatically generated from the field's description"
                                },
                                "titleOffset": {
                                    "type": "integer",
                                    "description": "A title offset value for the axis."
                                },
                                "properties": {
                                    "type": "object",
                                    "description": "Optional mark property definitions for custom axis styling."
                                }
                            }
                        },
                        "sort": {
                            "default": "ascending",
                            "supportedTypes": {
                                "quantitative": 1,
                                "ordinal": 1
                            },
                            "oneOf": [
                                {
                                    "type": "string",
                                    "enum": [
                                        "ascending",
                                        "descending",
                                        "unsorted"
                                    ]
                                },
                                {
                                    "type": "object",
                                    "required": [
                                        "field",
                                        "op"
                                    ],
                                    "properties": {
                                        "field": {
                                            "type": "string",
                                            "description": "The field name to aggregate over."
                                        },
                                        "op": {
                                            "type": "string",
                                            "enum": [
                                                "values",
                                                "count",
                                                "valid",
                                                "missing",
                                                "distinct",
                                                "sum",
                                                "mean",
                                                "average",
                                                "variance",
                                                "variancep",
                                                "stdev",
                                                "stdevp",
                                                "median",
                                                "q1",
                                                "q3",
                                                "modeskew",
                                                "min",
                                                "max",
                                                "argmin",
                                                "argmax"
                                            ],
                                            "description": "The field name to aggregate over."
                                        },
                                        "order": {
                                            "type": "string",
                                            "enum": [
                                                "ascending",
                                                "descending"
                                            ]
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "required": [
                        "field",
                        "type"
                    ],
                    "supportedMarktypes": {
                        "point": true,
                        "tick": true,
                        "bar": true,
                        "line": true,
                        "area": true,
                        "circle": true,
                        "square": true
                    }
                },
                "row": {
                    "type": "object",
                    "properties": {
                        "field": {
                            "type": "string"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "nominal",
                                "ordinal",
                                "quantitative",
                                "temporal"
                            ]
                        },
                        "timeUnit": {
                            "type": "string",
                            "enum": [
                                "year",
                                "month",
                                "day",
                                "date",
                                "hours",
                                "minutes",
                                "seconds"
                            ],
                            "supportedTypes": {
                                "temporal": 1
                            }
                        },
                        "bin": {
                            "type": [
                                "boolean",
                                "object"
                            ],
                            "default": false,
                            "properties": {
                                "maxbins": {
                                    "type": "integer",
                                    "default": 15,
                                    "minimum": 2,
                                    "description": "Maximum number of bins."
                                }
                            },
                            "supportedTypes": {
                                "quantitative": 1
                            }
                        },
                        "aggregate": {
                            "type": "string",
                            "enum": [
                                "count"
                            ],
                            "supportedTypes": {
                                "nominal": 1,
                                "ordinal": 1
                            }
                        },
                        "scale": {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string",
                                    "enum": [
                                        "linear",
                                        "log",
                                        "pow",
                                        "sqrt",
                                        "quantile"
                                    ],
                                    "default": "linear",
                                    "supportedTypes": {
                                        "quantitative": 1
                                    }
                                },
                                "domain": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. The domain may also be specified by a reference to a data source."
                                },
                                "range": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. For ordinal scales only, the range can be defined using a DataRef: the range values are then drawn dynamically from a backing data set."
                                },
                                "round": {
                                    "type": "boolean",
                                    "description": "If true, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid."
                                },
                                "bandWidth": {
                                    "type": "integer",
                                    "minimum": 0
                                },
                                "outerPadding": {
                                    "type": "number"
                                },
                                "padding": {
                                    "type": "number",
                                    "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 range band width will be equal to the padding width. For more, see the [D3 ordinal scale documentation](https://github.com/mbostock/d3/wiki/Ordinal-Scales)."
                                },
                                "points": {
                                    "type": "boolean",
                                    "description": "If true, distributes the ordinal values over a quantitative range at uniformly spaced points. The spacing of the points can be adjusted using the padding property. If false, the ordinal scale will construct evenly-spaced bands, rather than points."
                                }
                            }
                        },
                        "axis": {
                            "type": "object",
                            "properties": {
                                "format": {
                                    "type": "string",
                                    "description": "The formatting pattern for axis labels. If not undefined, this will be determined by the max value of the field."
                                },
                                "grid": {
                                    "type": "boolean",
                                    "description": "A flag indicate if gridlines should be created in addition to ticks. If `grid` is unspecified, the default value is `true` for ROW and COL. For X and Y, the default value is `true` for quantitative and time fields and `false` otherwise."
                                },
                                "layer": {
                                    "type": "string",
                                    "description": "A string indicating if the axis (and any gridlines) should be placed above or below the data marks."
                                },
                                "orient": {
                                    "type": "string",
                                    "enum": [
                                        "top",
                                        "right",
                                        "left",
                                        "bottom"
                                    ],
                                    "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)."
                                },
                                "ticks": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "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."
                                },
                                "title": {
                                    "type": "string",
                                    "description": "A title for the axis. (Shows field name and its function by default.)"
                                },
                                "labelMaxLength": {
                                    "type": "integer",
                                    "default": 25,
                                    "minimum": 0,
                                    "description": "Truncate labels that are too long."
                                },
                                "titleMaxLength": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "description": "Max length for axis title if the title is automatically generated from the field's description"
                                },
                                "titleOffset": {
                                    "type": "integer",
                                    "description": "A title offset value for the axis."
                                },
                                "properties": {
                                    "type": "object",
                                    "description": "Optional mark property definitions for custom axis styling."
                                }
                            }
                        },
                        "sort": {
                            "default": "ascending",
                            "supportedTypes": {
                                "quantitative": 1,
                                "ordinal": 1
                            },
                            "oneOf": [
                                {
                                    "type": "string",
                                    "enum": [
                                        "ascending",
                                        "descending",
                                        "unsorted"
                                    ]
                                },
                                {
                                    "type": "object",
                                    "required": [
                                        "field",
                                        "op"
                                    ],
                                    "properties": {
                                        "field": {
                                            "type": "string",
                                            "description": "The field name to aggregate over."
                                        },
                                        "op": {
                                            "type": "string",
                                            "enum": [
                                                "values",
                                                "count",
                                                "valid",
                                                "missing",
                                                "distinct",
                                                "sum",
                                                "mean",
                                                "average",
                                                "variance",
                                                "variancep",
                                                "stdev",
                                                "stdevp",
                                                "median",
                                                "q1",
                                                "q3",
                                                "modeskew",
                                                "min",
                                                "max",
                                                "argmin",
                                                "argmax"
                                            ],
                                            "description": "The field name to aggregate over."
                                        },
                                        "order": {
                                            "type": "string",
                                            "enum": [
                                                "ascending",
                                                "descending"
                                            ]
                                        }
                                    }
                                }
                            ]
                        },
                        "height": {
                            "type": "number",
                            "minimum": 0,
                            "default": 150
                        }
                    },
                    "required": [
                        "field",
                        "type"
                    ],
                    "supportedMarktypes": {
                        "point": true,
                        "tick": true,
                        "bar": true,
                        "line": true,
                        "area": true,
                        "circle": true,
                        "square": true,
                        "text": true
                    }
                },
                "column": {
                    "type": "object",
                    "properties": {
                        "field": {
                            "type": "string"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "nominal",
                                "ordinal",
                                "quantitative",
                                "temporal"
                            ]
                        },
                        "timeUnit": {
                            "type": "string",
                            "enum": [
                                "year",
                                "month",
                                "day",
                                "date",
                                "hours",
                                "minutes",
                                "seconds"
                            ],
                            "supportedTypes": {
                                "temporal": 1
                            }
                        },
                        "bin": {
                            "type": [
                                "boolean",
                                "object"
                            ],
                            "default": false,
                            "properties": {
                                "maxbins": {
                                    "type": "integer",
                                    "default": 15,
                                    "minimum": 2,
                                    "description": "Maximum number of bins."
                                }
                            },
                            "supportedTypes": {
                                "quantitative": 1
                            }
                        },
                        "aggregate": {
                            "type": "string",
                            "enum": [
                                "count"
                            ],
                            "supportedTypes": {
                                "nominal": 1,
                                "ordinal": 1
                            }
                        },
                        "scale": {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string",
                                    "enum": [
                                        "linear",
                                        "log",
                                        "pow",
                                        "sqrt",
                                        "quantile"
                                    ],
                                    "default": "linear",
                                    "supportedTypes": {
                                        "quantitative": 1
                                    }
                                },
                                "domain": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. The domain may also be specified by a reference to a data source."
                                },
                                "range": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. For ordinal scales only, the range can be defined using a DataRef: the range values are then drawn dynamically from a backing data set."
                                },
                                "round": {
                                    "type": "boolean",
                                    "description": "If true, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid."
                                },
                                "bandWidth": {
                                    "type": "integer",
                                    "minimum": 0
                                },
                                "outerPadding": {
                                    "type": "number"
                                },
                                "padding": {
                                    "type": "number",
                                    "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 range band width will be equal to the padding width. For more, see the [D3 ordinal scale documentation](https://github.com/mbostock/d3/wiki/Ordinal-Scales)."
                                },
                                "points": {
                                    "type": "boolean",
                                    "description": "If true, distributes the ordinal values over a quantitative range at uniformly spaced points. The spacing of the points can be adjusted using the padding property. If false, the ordinal scale will construct evenly-spaced bands, rather than points."
                                }
                            }
                        },
                        "axis": {
                            "type": "object",
                            "properties": {
                                "format": {
                                    "type": "string",
                                    "description": "The formatting pattern for axis labels. If not undefined, this will be determined by the max value of the field."
                                },
                                "grid": {
                                    "type": "boolean",
                                    "description": "A flag indicate if gridlines should be created in addition to ticks. If `grid` is unspecified, the default value is `true` for ROW and COL. For X and Y, the default value is `true` for quantitative and time fields and `false` otherwise."
                                },
                                "layer": {
                                    "type": "string",
                                    "description": "A string indicating if the axis (and any gridlines) should be placed above or below the data marks."
                                },
                                "orient": {
                                    "type": "string",
                                    "enum": [
                                        "top",
                                        "right",
                                        "left",
                                        "bottom"
                                    ],
                                    "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)."
                                },
                                "ticks": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "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."
                                },
                                "title": {
                                    "type": "string",
                                    "description": "A title for the axis. (Shows field name and its function by default.)"
                                },
                                "labelMaxLength": {
                                    "type": "integer",
                                    "default": 25,
                                    "minimum": 0,
                                    "description": "Truncate labels that are too long."
                                },
                                "titleMaxLength": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "description": "Max length for axis title if the title is automatically generated from the field's description"
                                },
                                "titleOffset": {
                                    "type": "integer",
                                    "description": "A title offset value for the axis."
                                },
                                "properties": {
                                    "type": "object",
                                    "description": "Optional mark property definitions for custom axis styling."
                                }
                            }
                        },
                        "sort": {
                            "default": "ascending",
                            "supportedTypes": {
                                "quantitative": 1,
                                "ordinal": 1
                            },
                            "oneOf": [
                                {
                                    "type": "string",
                                    "enum": [
                                        "ascending",
                                        "descending",
                                        "unsorted"
                                    ]
                                },
                                {
                                    "type": "object",
                                    "required": [
                                        "field",
                                        "op"
                                    ],
                                    "properties": {
                                        "field": {
                                            "type": "string",
                                            "description": "The field name to aggregate over."
                                        },
                                        "op": {
                                            "type": "string",
                                            "enum": [
                                                "values",
                                                "count",
                                                "valid",
                                                "missing",
                                                "distinct",
                                                "sum",
                                                "mean",
                                                "average",
                                                "variance",
                                                "variancep",
                                                "stdev",
                                                "stdevp",
                                                "median",
                                                "q1",
                                                "q3",
                                                "modeskew",
                                                "min",
                                                "max",
                                                "argmin",
                                                "argmax"
                                            ],
                                            "description": "The field name to aggregate over."
                                        },
                                        "order": {
                                            "type": "string",
                                            "enum": [
                                                "ascending",
                                                "descending"
                                            ]
                                        }
                                    }
                                }
                            ]
                        },
                        "width": {
                            "type": "number",
                            "minimum": 0,
                            "default": 150
                        }
                    },
                    "required": [
                        "field",
                        "type"
                    ],
                    "supportedMarktypes": {
                        "point": true,
                        "tick": true,
                        "bar": true,
                        "line": true,
                        "area": true,
                        "circle": true,
                        "square": true,
                        "text": true
                    }
                },
                "size": {
                    "type": "object",
                    "properties": {
                        "field": {
                            "type": "string"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "nominal",
                                "ordinal",
                                "quantitative",
                                "temporal"
                            ]
                        },
                        "timeUnit": {
                            "type": "string",
                            "enum": [
                                "year",
                                "month",
                                "day",
                                "date",
                                "hours",
                                "minutes",
                                "seconds"
                            ],
                            "supportedTypes": {
                                "temporal": 1
                            }
                        },
                        "bin": {
                            "type": [
                                "boolean",
                                "object"
                            ],
                            "default": false,
                            "properties": {
                                "maxbins": {
                                    "type": "integer",
                                    "default": 15,
                                    "minimum": 2,
                                    "description": "Maximum number of bins."
                                }
                            },
                            "supportedTypes": {
                                "quantitative": 1
                            }
                        },
                        "aggregate": {
                            "type": "string",
                            "enum": [
                                "values",
                                "count",
                                "valid",
                                "missing",
                                "distinct",
                                "sum",
                                "mean",
                                "average",
                                "variance",
                                "variancep",
                                "stdev",
                                "stdevp",
                                "median",
                                "q1",
                                "q3",
                                "modeskew",
                                "min",
                                "max",
                                "argmin",
                                "argmax"
                            ],
                            "supportedEnums": {
                                "quantitative": [
                                    "values",
                                    "count",
                                    "valid",
                                    "missing",
                                    "distinct",
                                    "sum",
                                    "mean",
                                    "average",
                                    "variance",
                                    "variancep",
                                    "stdev",
                                    "stdevp",
                                    "median",
                                    "q1",
                                    "q3",
                                    "modeskew",
                                    "min",
                                    "max",
                                    "argmin",
                                    "argmax"
                                ],
                                "ordinal": [
                                    "median",
                                    "min",
                                    "max"
                                ],
                                "nominal": [],
                                "temporal": [
                                    "mean",
                                    "median",
                                    "min",
                                    "max"
                                ],
                                "": [
                                    "count"
                                ]
                            },
                            "supportedTypes": {
                                "quantitative": 1,
                                "nominal": 1,
                                "ordinal": 1,
                                "temporal": 1,
                                "": 1
                            }
                        },
                        "scale": {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string",
                                    "enum": [
                                        "linear",
                                        "log",
                                        "pow",
                                        "sqrt",
                                        "quantile"
                                    ],
                                    "default": "linear",
                                    "supportedTypes": {
                                        "quantitative": 1
                                    }
                                },
                                "domain": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. The domain may also be specified by a reference to a data source."
                                },
                                "range": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. For ordinal scales only, the range can be defined using a DataRef: the range values are then drawn dynamically from a backing data set."
                                },
                                "round": {
                                    "type": "boolean",
                                    "description": "If true, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid."
                                },
                                "bandWidth": {
                                    "type": "integer",
                                    "minimum": 0
                                },
                                "outerPadding": {
                                    "type": "number"
                                },
                                "padding": {
                                    "type": "number",
                                    "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 range band width will be equal to the padding width. For more, see the [D3 ordinal scale documentation](https://github.com/mbostock/d3/wiki/Ordinal-Scales)."
                                },
                                "points": {
                                    "type": "boolean",
                                    "description": "If true, distributes the ordinal values over a quantitative range at uniformly spaced points. The spacing of the points can be adjusted using the padding property. If false, the ordinal scale will construct evenly-spaced bands, rather than points."
                                },
                                "clamp": {
                                    "type": "boolean",
                                    "default": true,
                                    "description": "If true, values that exceed the data domain are clamped to either the minimum or maximum range value"
                                },
                                "nice": {
                                    "oneOf": [
                                        {
                                            "type": "boolean",
                                            "description": "If true, modifies the scale domain to use a more human-friendly number range (e.g., 7 instead of 6.96)."
                                        },
                                        {
                                            "type": "string",
                                            "enum": [
                                                "second",
                                                "minute",
                                                "hour",
                                                "day",
                                                "week",
                                                "month",
                                                "year"
                                            ],
                                            "description": "If specified, 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; legal values are \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", or \"year\"."
                                        }
                                    ],
                                    "supportedTypes": {
                                        "quantitative": 1,
                                        "temporal": 1
                                    },
                                    "description": ""
                                },
                                "exponent": {
                                    "type": "number",
                                    "description": "Sets the exponent of the scale transformation. For pow scale types only, otherwise ignored."
                                },
                                "zero": {
                                    "type": "boolean",
                                    "description": "If true, ensures that a zero baseline value is included in the scale domain. This option is ignored for non-quantitative scales.",
                                    "supportedTypes": {
                                        "quantitative": 1,
                                        "temporal": 1
                                    }
                                },
                                "useRawDomain": {
                                    "type": "boolean",
                                    "description": "Uses the source data range as scale domain instead of aggregated data for aggregate axis. This option does not work with sum or count aggregateas they might have a substantially larger scale range.By default, use value from config.useRawDomain."
                                }
                            }
                        },
                        "legend": {
                            "default": true,
                            "description": "Properties of a legend or boolean flag for determining whether to show it.",
                            "oneOf": [
                                {
                                    "type": "object",
                                    "properties": {
                                        "orient": {
                                            "type": "string",
                                            "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\"."
                                        },
                                        "title": {
                                            "type": "string",
                                            "description": "A title for the legend. (Shows field name and its function by default.)"
                                        },
                                        "format": {
                                            "type": "string",
                                            "description": "An optional formatting pattern for legend labels. Vega uses D3's format pattern."
                                        },
                                        "values": {
                                            "type": "array",
                                            "description": "Explicitly set the visible legend values."
                                        },
                                        "properties": {
                                            "type": "object",
                                            "description": "Optional mark property definitions for custom legend styling. "
                                        }
                                    }
                                },
                                {
                                    "type": "boolean"
                                }
                            ]
                        },
                        "sort": {
                            "default": "ascending",
                            "supportedTypes": {
                                "quantitative": 1,
                                "ordinal": 1
                            },
                            "oneOf": [
                                {
                                    "type": "string",
                                    "enum": [
                                        "ascending",
                                        "descending",
                                        "unsorted"
                                    ]
                                },
                                {
                                    "type": "object",
                                    "required": [
                                        "field",
                                        "op"
                                    ],
                                    "properties": {
                                        "field": {
                                            "type": "string",
                                            "description": "The field name to aggregate over."
                                        },
                                        "op": {
                                            "type": "string",
                                            "enum": [
                                                "values",
                                                "count",
                                                "valid",
                                                "missing",
                                                "distinct",
                                                "sum",
                                                "mean",
                                                "average",
                                                "variance",
                                                "variancep",
                                                "stdev",
                                                "stdevp",
                                                "median",
                                                "q1",
                                                "q3",
                                                "modeskew",
                                                "min",
                                                "max",
                                                "argmin",
                                                "argmax"
                                            ],
                                            "description": "The field name to aggregate over."
                                        },
                                        "order": {
                                            "type": "string",
                                            "enum": [
                                                "ascending",
                                                "descending"
                                            ]
                                        }
                                    }
                                }
                            ]
                        },
                        "value": {
                            "type": "integer",
                            "default": 30,
                            "minimum": 0,
                            "description": "Size of marks."
                        }
                    },
                    "supportedMarktypes": {
                        "point": true,
                        "bar": true,
                        "circle": true,
                        "square": true,
                        "text": true
                    }
                },
                "color": {
                    "type": "object",
                    "properties": {
                        "field": {
                            "type": "string"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "nominal",
                                "ordinal",
                                "quantitative",
                                "temporal"
                            ]
                        },
                        "timeUnit": {
                            "type": "string",
                            "enum": [
                                "year",
                                "month",
                                "day",
                                "date",
                                "hours",
                                "minutes",
                                "seconds"
                            ],
                            "supportedTypes": {
                                "temporal": 1
                            }
                        },
                        "bin": {
                            "type": [
                                "boolean",
                                "object"
                            ],
                            "default": false,
                            "properties": {
                                "maxbins": {
                                    "type": "integer",
                                    "default": 15,
                                    "minimum": 2,
                                    "description": "Maximum number of bins."
                                }
                            },
                            "supportedTypes": {
                                "quantitative": 1
                            }
                        },
                        "aggregate": {
                            "type": "string",
                            "enum": [
                                "values",
                                "count",
                                "valid",
                                "missing",
                                "distinct",
                                "sum",
                                "mean",
                                "average",
                                "variance",
                                "variancep",
                                "stdev",
                                "stdevp",
                                "median",
                                "q1",
                                "q3",
                                "modeskew",
                                "min",
                                "max",
                                "argmin",
                                "argmax"
                            ],
                            "supportedEnums": {
                                "quantitative": [
                                    "values",
                                    "count",
                                    "valid",
                                    "missing",
                                    "distinct",
                                    "sum",
                                    "mean",
                                    "average",
                                    "variance",
                                    "variancep",
                                    "stdev",
                                    "stdevp",
                                    "median",
                                    "q1",
                                    "q3",
                                    "modeskew",
                                    "min",
                                    "max",
                                    "argmin",
                                    "argmax"
                                ],
                                "ordinal": [
                                    "median",
                                    "min",
                                    "max"
                                ],
                                "nominal": [],
                                "temporal": [
                                    "mean",
                                    "median",
                                    "min",
                                    "max"
                                ],
                                "": [
                                    "count"
                                ]
                            },
                            "supportedTypes": {
                                "quantitative": 1,
                                "nominal": 1,
                                "ordinal": 1,
                                "temporal": 1,
                                "": 1
                            }
                        },
                        "scale": {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string",
                                    "enum": [
                                        "linear",
                                        "log",
                                        "pow",
                                        "sqrt",
                                        "quantile"
                                    ],
                                    "default": "linear",
                                    "supportedTypes": {
                                        "quantitative": 1
                                    }
                                },
                                "domain": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. The domain may also be specified by a reference to a data source."
                                },
                                "range": {
                                    "type": [
                                        "string",
                                        "array"
                                    ],
                                    "description": "Color palette, if undefined vega-lite will use data propertyto pick one from c10palette, c20palette, or ordinalPalette."
                                },
                                "round": {
                                    "type": "boolean",
                                    "description": "If true, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid."
                                },
                                "bandWidth": {
                                    "type": "integer",
                                    "minimum": 0
                                },
                                "outerPadding": {
                                    "type": "number"
                                },
                                "padding": {
                                    "type": "number",
                                    "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 range band width will be equal to the padding width. For more, see the [D3 ordinal scale documentation](https://github.com/mbostock/d3/wiki/Ordinal-Scales)."
                                },
                                "points": {
                                    "type": "boolean",
                                    "description": "If true, distributes the ordinal values over a quantitative range at uniformly spaced points. The spacing of the points can be adjusted using the padding property. If false, the ordinal scale will construct evenly-spaced bands, rather than points."
                                },
                                "clamp": {
                                    "type": "boolean",
                                    "default": true,
                                    "description": "If true, values that exceed the data domain are clamped to either the minimum or maximum range value"
                                },
                                "nice": {
                                    "oneOf": [
                                        {
                                            "type": "boolean",
                                            "description": "If true, modifies the scale domain to use a more human-friendly number range (e.g., 7 instead of 6.96)."
                                        },
                                        {
                                            "type": "string",
                                            "enum": [
                                                "second",
                                                "minute",
                                                "hour",
                                                "day",
                                                "week",
                                                "month",
                                                "year"
                                            ],
                                            "description": "If specified, 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; legal values are \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", or \"year\"."
                                        }
                                    ],
                                    "supportedTypes": {
                                        "quantitative": 1,
                                        "temporal": 1
                                    },
                                    "description": ""
                                },
                                "exponent": {
                                    "type": "number",
                                    "description": "Sets the exponent of the scale transformation. For pow scale types only, otherwise ignored."
                                },
                                "zero": {
                                    "type": "boolean",
                                    "description": "If true, ensures that a zero baseline value is included in the scale domain. This option is ignored for non-quantitative scales.",
                                    "supportedTypes": {
                                        "quantitative": 1,
                                        "temporal": 1
                                    }
                                },
                                "useRawDomain": {
                                    "type": "boolean",
                                    "description": "Uses the source data range as scale domain instead of aggregated data for aggregate axis. This option does not work with sum or count aggregateas they might have a substantially larger scale range.By default, use value from config.useRawDomain."
                                },
                                "c10palette": {
                                    "type": "string",
                                    "default": "category10",
                                    "enum": [
                                        "category10",
                                        "category10k",
                                        "Pastel1",
                                        "Pastel2",
                                        "Set1",
                                        "Set2",
                                        "Set3"
                                    ]
                                },
                                "c20palette": {
                                    "type": "string",
                                    "default": "category20",
                                    "enum": [
                                        "category20",
                                        "category20b",
                                        "category20c"
                                    ]
                                },
                                "ordinalPalette": {
                                    "type": "string",
                                    "description": "Color palette to encode ordinal variables.",
                                    "enum": [
                                        "YlGn",
                                        "YlGnBu",
                                        "GnBu",
                                        "BuGn",
                                        "PuBuGn",
                                        "PuBu",
                                        "BuPu",
                                        "RdPu",
                                        "PuRd",
                                        "OrRd",
                                        "YlOrRd",
                                        "YlOrBr",
                                        "Purples",
                                        "Blues",
                                        "Greens",
                                        "Oranges",
                                        "Reds",
                                        "Greys",
                                        "PuOr",
                                        "BrBG",
                                        "PRGn",
                                        "PiYG",
                                        "RdBu",
                                        "RdGy",
                                        "RdYlBu",
                                        "Spectral",
                                        "RdYlGn",
                                        "Accent",
                                        "Dark2",
                                        "Paired",
                                        "Pastel1",
                                        "Pastel2",
                                        "Set1",
                                        "Set2",
                                        "Set3"
                                    ]
                                },
                                "quantitativeRange": {
                                    "type": "array",
                                    "default": [
                                        "#AFC6A3",
                                        "#09622A"
                                    ],
                                    "description": "Color range to encode quantitative variables.",
                                    "minItems": 2,
                                    "maxItems": 2,
                                    "items": {
                                        "type": "string",
                                        "role": "color"
                                    }
                                }
                            }
                        },
                        "legend": {
                            "default": true,
                            "description": "Properties of a legend or boolean flag for determining whether to show it.",
                            "oneOf": [
                                {
                                    "type": "object",
                                    "properties": {
                                        "orient": {
                                            "type": "string",
                                            "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\"."
                                        },
                                        "title": {
                                            "type": "string",
                                            "description": "A title for the legend. (Shows field name and its function by default.)"
                                        },
                                        "format": {
                                            "type": "string",
                                            "description": "An optional formatting pattern for legend labels. Vega uses D3's format pattern."
                                        },
                                        "values": {
                                            "type": "array",
                                            "description": "Explicitly set the visible legend values."
                                        },
                                        "properties": {
                                            "type": "object",
                                            "description": "Optional mark property definitions for custom legend styling. "
                                        }
                                    }
                                },
                                {
                                    "type": "boolean"
                                }
                            ]
                        },
                        "sort": {
                            "default": "ascending",
                            "supportedTypes": {
                                "quantitative": 1,
                                "ordinal": 1
                            },
                            "oneOf": [
                                {
                                    "type": "string",
                                    "enum": [
                                        "ascending",
                                        "descending",
                                        "unsorted"
                                    ]
                                },
                                {
                                    "type": "object",
                                    "required": [
                                        "field",
                                        "op"
                                    ],
                                    "properties": {
                                        "field": {
                                            "type": "string",
                                            "description": "The field name to aggregate over."
                                        },
                                        "op": {
                                            "type": "string",
                                            "enum": [
                                                "values",
                                                "count",
                                                "valid",
                                                "missing",
                                                "distinct",
                                                "sum",
                                                "mean",
                                                "average",
                                                "variance",
                                                "variancep",
                                                "stdev",
                                                "stdevp",
                                                "median",
                                                "q1",
                                                "q3",
                                                "modeskew",
                                                "min",
                                                "max",
                                                "argmin",
                                                "argmax"
                                            ],
                                            "description": "The field name to aggregate over."
                                        },
                                        "order": {
                                            "type": "string",
                                            "enum": [
                                                "ascending",
                                                "descending"
                                            ]
                                        }
                                    }
                                }
                            ]
                        },
                        "value": {
                            "type": "string",
                            "role": "color",
                            "default": "#4682b4",
                            "description": "Color to be used for marks."
                        },
                        "opacity": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 1
                        }
                    },
                    "supportedMarktypes": {
                        "point": true,
                        "tick": true,
                        "bar": true,
                        "line": true,
                        "area": true,
                        "circle": true,
                        "square": true,
                        "text": true
                    }
                },
                "shape": {
                    "type": "object",
                    "properties": {
                        "field": {
                            "type": "string"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "nominal",
                                "ordinal",
                                "quantitative",
                                "temporal"
                            ]
                        },
                        "timeUnit": {
                            "type": "string",
                            "enum": [
                                "year",
                                "month",
                                "day",
                                "date",
                                "hours",
                                "minutes",
                                "seconds"
                            ],
                            "supportedTypes": {
                                "temporal": 1
                            }
                        },
                        "bin": {
                            "type": [
                                "boolean",
                                "object"
                            ],
                            "default": false,
                            "properties": {
                                "maxbins": {
                                    "type": "integer",
                                    "default": 15,
                                    "minimum": 2,
                                    "description": "Maximum number of bins."
                                }
                            },
                            "supportedTypes": {
                                "quantitative": 1
                            }
                        },
                        "aggregate": {
                            "type": "string",
                            "enum": [
                                "count"
                            ],
                            "supportedTypes": {
                                "nominal": 1,
                                "ordinal": 1
                            }
                        },
                        "scale": {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string",
                                    "enum": [
                                        "linear",
                                        "log",
                                        "pow",
                                        "sqrt",
                                        "quantile"
                                    ],
                                    "default": "linear",
                                    "supportedTypes": {
                                        "quantitative": 1
                                    }
                                },
                                "domain": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. The domain may also be specified by a reference to a data source."
                                },
                                "range": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. For ordinal scales only, the range can be defined using a DataRef: the range values are then drawn dynamically from a backing data set."
                                },
                                "round": {
                                    "type": "boolean",
                                    "description": "If true, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid."
                                },
                                "bandWidth": {
                                    "type": "integer",
                                    "minimum": 0
                                },
                                "outerPadding": {
                                    "type": "number"
                                },
                                "padding": {
                                    "type": "number",
                                    "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 range band width will be equal to the padding width. For more, see the [D3 ordinal scale documentation](https://github.com/mbostock/d3/wiki/Ordinal-Scales)."
                                },
                                "points": {
                                    "type": "boolean",
                                    "description": "If true, distributes the ordinal values over a quantitative range at uniformly spaced points. The spacing of the points can be adjusted using the padding property. If false, the ordinal scale will construct evenly-spaced bands, rather than points."
                                }
                            }
                        },
                        "legend": {
                            "default": true,
                            "description": "Properties of a legend or boolean flag for determining whether to show it.",
                            "oneOf": [
                                {
                                    "type": "object",
                                    "properties": {
                                        "orient": {
                                            "type": "string",
                                            "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\"."
                                        },
                                        "title": {
                                            "type": "string",
                                            "description": "A title for the legend. (Shows field name and its function by default.)"
                                        },
                                        "format": {
                                            "type": "string",
                                            "description": "An optional formatting pattern for legend labels. Vega uses D3's format pattern."
                                        },
                                        "values": {
                                            "type": "array",
                                            "description": "Explicitly set the visible legend values."
                                        },
                                        "properties": {
                                            "type": "object",
                                            "description": "Optional mark property definitions for custom legend styling. "
                                        }
                                    }
                                },
                                {
                                    "type": "boolean"
                                }
                            ]
                        },
                        "sort": {
                            "default": "ascending",
                            "supportedTypes": {
                                "quantitative": 1,
                                "ordinal": 1
                            },
                            "oneOf": [
                                {
                                    "type": "string",
                                    "enum": [
                                        "ascending",
                                        "descending",
                                        "unsorted"
                                    ]
                                },
                                {
                                    "type": "object",
                                    "required": [
                                        "field",
                                        "op"
                                    ],
                                    "properties": {
                                        "field": {
                                            "type": "string",
                                            "description": "The field name to aggregate over."
                                        },
                                        "op": {
                                            "type": "string",
                                            "enum": [
                                                "values",
                                                "count",
                                                "valid",
                                                "missing",
                                                "distinct",
                                                "sum",
                                                "mean",
                                                "average",
                                                "variance",
                                                "variancep",
                                                "stdev",
                                                "stdevp",
                                                "median",
                                                "q1",
                                                "q3",
                                                "modeskew",
                                                "min",
                                                "max",
                                                "argmin",
                                                "argmax"
                                            ],
                                            "description": "The field name to aggregate over."
                                        },
                                        "order": {
                                            "type": "string",
                                            "enum": [
                                                "ascending",
                                                "descending"
                                            ]
                                        }
                                    }
                                }
                            ]
                        },
                        "value": {
                            "type": "string",
                            "enum": [
                                "circle",
                                "square",
                                "cross",
                                "diamond",
                                "triangle-up",
                                "triangle-down"
                            ],
                            "default": "circle",
                            "description": "Mark to be used."
                        },
                        "filled": {
                            "type": "boolean",
                            "default": false,
                            "description": "Whether the shape's color should be used as fill color instead of stroke color."
                        }
                    },
                    "supportedMarktypes": {
                        "point": true,
                        "circle": true,
                        "square": true
                    }
                },
                "text": {
                    "type": "object",
                    "properties": {
                        "field": {
                            "type": "string"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "nominal",
                                "ordinal",
                                "quantitative",
                                "temporal"
                            ]
                        },
                        "timeUnit": {
                            "type": "string",
                            "enum": [
                                "year",
                                "month",
                                "day",
                                "date",
                                "hours",
                                "minutes",
                                "seconds"
                            ],
                            "supportedTypes": {
                                "temporal": 1
                            }
                        },
                        "bin": {
                            "type": [
                                "boolean",
                                "object"
                            ],
                            "default": false,
                            "properties": {
                                "maxbins": {
                                    "type": "integer",
                                    "default": 15,
                                    "minimum": 2,
                                    "description": "Maximum number of bins."
                                }
                            },
                            "supportedTypes": {
                                "quantitative": 1
                            }
                        },
                        "aggregate": {
                            "type": "string",
                            "enum": [
                                "values",
                                "count",
                                "valid",
                                "missing",
                                "distinct",
                                "sum",
                                "mean",
                                "average",
                                "variance",
                                "variancep",
                                "stdev",
                                "stdevp",
                                "median",
                                "q1",
                                "q3",
                                "modeskew",
                                "min",
                                "max",
                                "argmin",
                                "argmax"
                            ],
                            "supportedEnums": {
                                "quantitative": [
                                    "values",
                                    "count",
                                    "valid",
                                    "missing",
                                    "distinct",
                                    "sum",
                                    "mean",
                                    "average",
                                    "variance",
                                    "variancep",
                                    "stdev",
                                    "stdevp",
                                    "median",
                                    "q1",
                                    "q3",
                                    "modeskew",
                                    "min",
                                    "max",
                                    "argmin",
                                    "argmax"
                                ],
                                "ordinal": [
                                    "median",
                                    "min",
                                    "max"
                                ],
                                "nominal": [],
                                "temporal": [
                                    "mean",
                                    "median",
                                    "min",
                                    "max"
                                ],
                                "": [
                                    "count"
                                ]
                            },
                            "supportedTypes": {
                                "quantitative": 1,
                                "nominal": 1,
                                "ordinal": 1,
                                "temporal": 1,
                                "": 1
                            }
                        },
                        "scale": {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string",
                                    "enum": [
                                        "linear",
                                        "log",
                                        "pow",
                                        "sqrt",
                                        "quantile"
                                    ],
                                    "default": "linear",
                                    "supportedTypes": {
                                        "quantitative": 1
                                    }
                                },
                                "domain": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. The domain may also be specified by a reference to a data source."
                                },
                                "range": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. For ordinal scales only, the range can be defined using a DataRef: the range values are then drawn dynamically from a backing data set."
                                },
                                "round": {
                                    "type": "boolean",
                                    "description": "If true, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid."
                                },
                                "bandWidth": {
                                    "type": "integer",
                                    "minimum": 0
                                },
                                "outerPadding": {
                                    "type": "number"
                                },
                                "padding": {
                                    "type": "number",
                                    "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 range band width will be equal to the padding width. For more, see the [D3 ordinal scale documentation](https://github.com/mbostock/d3/wiki/Ordinal-Scales)."
                                },
                                "points": {
                                    "type": "boolean",
                                    "description": "If true, distributes the ordinal values over a quantitative range at uniformly spaced points. The spacing of the points can be adjusted using the padding property. If false, the ordinal scale will construct evenly-spaced bands, rather than points."
                                },
                                "clamp": {
                                    "type": "boolean",
                                    "default": true,
                                    "description": "If true, values that exceed the data domain are clamped to either the minimum or maximum range value"
                                },
                                "nice": {
                                    "oneOf": [
                                        {
                                            "type": "boolean",
                                            "description": "If true, modifies the scale domain to use a more human-friendly number range (e.g., 7 instead of 6.96)."
                                        },
                                        {
                                            "type": "string",
                                            "enum": [
                                                "second",
                                                "minute",
                                                "hour",
                                                "day",
                                                "week",
                                                "month",
                                                "year"
                                            ],
                                            "description": "If specified, 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; legal values are \"second\", \"minute\", \"hour\", \"day\", \"week\", \"month\", or \"year\"."
                                        }
                                    ],
                                    "supportedTypes": {
                                        "quantitative": 1,
                                        "temporal": 1
                                    },
                                    "description": ""
                                },
                                "exponent": {
                                    "type": "number",
                                    "description": "Sets the exponent of the scale transformation. For pow scale types only, otherwise ignored."
                                },
                                "zero": {
                                    "type": "boolean",
                                    "description": "If true, ensures that a zero baseline value is included in the scale domain. This option is ignored for non-quantitative scales.",
                                    "supportedTypes": {
                                        "quantitative": 1,
                                        "temporal": 1
                                    }
                                },
                                "useRawDomain": {
                                    "type": "boolean",
                                    "description": "Uses the source data range as scale domain instead of aggregated data for aggregate axis. This option does not work with sum or count aggregateas they might have a substantially larger scale range.By default, use value from config.useRawDomain."
                                }
                            }
                        },
                        "sort": {
                            "default": "ascending",
                            "supportedTypes": {
                                "quantitative": 1,
                                "ordinal": 1
                            },
                            "oneOf": [
                                {
                                    "type": "string",
                                    "enum": [
                                        "ascending",
                                        "descending",
                                        "unsorted"
                                    ]
                                },
                                {
                                    "type": "object",
                                    "required": [
                                        "field",
                                        "op"
                                    ],
                                    "properties": {
                                        "field": {
                                            "type": "string",
                                            "description": "The field name to aggregate over."
                                        },
                                        "op": {
                                            "type": "string",
                                            "enum": [
                                                "values",
                                                "count",
                                                "valid",
                                                "missing",
                                                "distinct",
                                                "sum",
                                                "mean",
                                                "average",
                                                "variance",
                                                "variancep",
                                                "stdev",
                                                "stdevp",
                                                "median",
                                                "q1",
                                                "q3",
                                                "modeskew",
                                                "min",
                                                "max",
                                                "argmin",
                                                "argmax"
                                            ],
                                            "description": "The field name to aggregate over."
                                        },
                                        "order": {
                                            "type": "string",
                                            "enum": [
                                                "ascending",
                                                "descending"
                                            ]
                                        }
                                    }
                                }
                            ]
                        },
                        "align": {
                            "type": "string",
                            "default": "right"
                        },
                        "baseline": {
                            "type": "string",
                            "default": "middle"
                        },
                        "color": {
                            "type": "string",
                            "role": "color",
                            "default": "#000000"
                        },
                        "margin": {
                            "type": "integer",
                            "default": 4,
                            "minimum": 0
                        },
                        "placeholder": {
                            "type": "string",
                            "default": "Abc"
                        },
                        "font": {
                            "type": "object",
                            "properties": {
                                "weight": {
                                    "type": "string",
                                    "enum": [
                                        "normal",
                                        "bold"
                                    ],
                                    "default": "normal"
                                },
                                "size": {
                                    "type": "integer",
                                    "default": 10,
                                    "minimum": 0
                                },
                                "family": {
                                    "type": "string",
                                    "default": "Helvetica Neue"
                                },
                                "style": {
                                    "type": "string",
                                    "default": "normal",
                                    "enum": [
                                        "normal",
                                        "italic"
                                    ]
                                }
                            }
                        },
                        "format": {
                            "type": "string",
                            "default": "",
                            "description": "The formatting pattern for text value.If not defined, this will be determined automatically"
                        }
                    },
                    "supportedMarktypes": {
                        "text": true
                    }
                },
                "detail": {
                    "type": "object",
                    "properties": {
                        "field": {
                            "type": "string"
                        },
                        "type": {
                            "type": "string",
                            "enum": [
                                "nominal",
                                "ordinal",
                                "quantitative",
                                "temporal"
                            ]
                        },
                        "timeUnit": {
                            "type": "string",
                            "enum": [
                                "year",
                                "month",
                                "day",
                                "date",
                                "hours",
                                "minutes",
                                "seconds"
                            ],
                            "supportedTypes": {
                                "temporal": 1
                            }
                        },
                        "bin": {
                            "type": [
                                "boolean",
                                "object"
                            ],
                            "default": false,
                            "properties": {
                                "maxbins": {
                                    "type": "integer",
                                    "default": 15,
                                    "minimum": 2,
                                    "description": "Maximum number of bins."
                                }
                            },
                            "supportedTypes": {
                                "quantitative": 1
                            }
                        },
                        "aggregate": {
                            "type": "string",
                            "enum": [
                                "count"
                            ],
                            "supportedTypes": {
                                "nominal": 1,
                                "ordinal": 1
                            }
                        },
                        "scale": {
                            "type": "object",
                            "properties": {
                                "type": {
                                    "type": "string",
                                    "enum": [
                                        "linear",
                                        "log",
                                        "pow",
                                        "sqrt",
                                        "quantile"
                                    ],
                                    "default": "linear",
                                    "supportedTypes": {
                                        "quantitative": 1
                                    }
                                },
                                "domain": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. The domain may also be specified by a reference to a data source."
                                },
                                "range": {
                                    "type": [
                                        "array",
                                        "object"
                                    ],
                                    "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. For ordinal scales only, the range can be defined using a DataRef: the range values are then drawn dynamically from a backing data set."
                                },
                                "round": {
                                    "type": "boolean",
                                    "description": "If true, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid."
                                },
                                "bandWidth": {
                                    "type": "integer",
                                    "minimum": 0
                                },
                                "outerPadding": {
                                    "type": "number"
                                },
                                "padding": {
                                    "type": "number",
                                    "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 range band width will be equal to the padding width. For more, see the [D3 ordinal scale documentation](https://github.com/mbostock/d3/wiki/Ordinal-Scales)."
                                },
                                "points": {
                                    "type": "boolean",
                                    "description": "If true, distributes the ordinal values over a quantitative range at uniformly spaced points. The spacing of the points can be adjusted using the padding property. If false, the ordinal scale will construct evenly-spaced bands, rather than points."
                                }
                            }
                        },
                        "sort": {
                            "default": "ascending",
                            "supportedTypes": {
                                "quantitative": 1,
                                "ordinal": 1
                            },
                            "oneOf": [
                                {
                                    "type": "string",
                                    "enum": [
                                        "ascending",
                                        "descending",
                                        "unsorted"
                                    ]
                                },
                                {
                                    "type": "object",
                                    "required": [
                                        "field",
                                        "op"
                                    ],
                                    "properties": {
                                        "field": {
                                            "type": "string",
                                            "description": "The field name to aggregate over."
                                        },
                                        "op": {
                                            "type": "string",
                                            "enum": [
                                                "values",
                                                "count",
                                                "valid",
                                                "missing",
                                                "distinct",
                                                "sum",
                                                "mean",
                                                "average",
                                                "variance",
                                                "variancep",
                                                "stdev",
                                                "stdevp",
                                                "median",
                                                "q1",
                                                "q3",
                                                "modeskew",
                                                "min",
                                                "max",
                                                "argmin",
                                                "argmax"
                                            ],
                                            "description": "The field name to aggregate over."
                                        },
                                        "order": {
                                            "type": "string",
                                            "enum": [
                                                "ascending",
                                                "descending"
                                            ]
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "supportedMarktypes": {
                        "point": true,
                        "tick": true,
                        "line": true,
                        "circle": true,
                        "square": true
                    }
                }
            }
        },
        "config": {
            "type": "object",
            "properties": {
                "width": {
                    "type": "integer"
                },
                "height": {
                    "type": "integer"
                },
                "viewport": {
                    "type": "array",
                    "items": {
                        "type": "integer"
                    }
                },
                "gridColor": {
                    "type": "string",
                    "role": "color",
                    "default": "#000000"
                },
                "gridOpacity": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1,
                    "default": 0.08
                },
                "filterNull": {
                    "type": "object",
                    "properties": {
                        "nominal": {
                            "type": "boolean",
                            "default": false
                        },
                        "ordinal": {
                            "type": "boolean",
                            "default": false
                        },
                        "quantitative": {
                            "type": "boolean",
                            "default": true
                        },
                        "temporal": {
                            "type": "boolean",
                            "default": true
                        }
                    }
                },
                "autoSortLine": {
                    "type": "boolean",
                    "default": true
                },
                "singleHeight": {
                    "type": "integer",
                    "default": 200,
                    "minimum": 0
                },
                "singleWidth": {
                    "type": "integer",
                    "default": 200,
                    "minimum": 0
                },
                "largeBandWidth": {
                    "type": "integer",
                    "default": 21,
                    "minimum": 0
                },
                "smallBandWidth": {
                    "type": "integer",
                    "default": 12,
                    "minimum": 0
                },
                "largeBandMaxCardinality": {
                    "type": "integer",
                    "default": 10
                },
                "padding": {
                    "type": "number",
                    "default": 1,
                    "description": "default scale padding for ordinal x/y scales."
                },
                "cellPadding": {
                    "type": "number",
                    "default": 0.1,
                    "description": "default scale padding for row/column scales."
                },
                "cellGridColor": {
                    "type": "string",
                    "role": "color",
                    "default": "#000000"
                },
                "cellGridOpacity": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1,
                    "default": 0.25
                },
                "cellGridOffset": {
                    "type": "number",
                    "default": 6
                },
                "cellBackgroundColor": {
                    "type": "string",
                    "role": "color",
                    "default": "rgba(0,0,0,0)"
                },
                "textCellWidth": {
                    "type": "integer",
                    "default": 90,
                    "minimum": 0
                },
                "stack": {
                    "type": [
                        "boolean",
                        "object"
                    ],
                    "default": {},
                    "description": "Enable stacking (for bar and area marks only).",
                    "properties": {
                        "sort": {
                            "oneOf": [
                                {
                                    "type": "string",
                                    "enum": [
                                        "ascending",
                                        "descending"
                                    ]
                                },
                                {
                                    "type": "array",
                                    "items": {
                                        "type": "string"
                                    }
                                }
                            ],
                            "description": "Order of the stack. This can be either a string (either \"descending\" or \"ascending\")or a list of fields to determine the order of stack layers.By default, stack uses descending order."
                        },
                        "offset": {
                            "type": "string",
                            "enum": [
                                "zero",
                                "center",
                                "normalize"
                            ]
                        }
                    }
                },
                "strokeWidth": {
                    "type": "integer",
                    "default": 2,
                    "minimum": 0
                },
                "singleBarOffset": {
                    "type": "integer",
                    "default": 5,
                    "minimum": 0
                },
                "timeScaleLabelLength": {
                    "type": "integer",
                    "default": 3,
                    "minimum": 0,
                    "description": "Max length for values in dayScaleLabel and monthScaleLabel.  Zero means using full names in dayScaleLabel/monthScaleLabel."
                },
                "dayScaleLabel": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "default": [
                        "Sunday",
                        "Monday",
                        "Tuesday",
                        "Wednesday",
                        "Thursday",
                        "Friday",
                        "Saturday"
                    ],
                    "description": "Axis labels for day of week, starting from Sunday.(Consistent with Javascript -- See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay."
                },
                "monthScaleLabel": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    },
                    "default": [
                        "January",
                        "February",
                        "March",
                        "April",
                        "May",
                        "June",
                        "July",
                        "August",
                        "September",
                        "October",
                        "November",
                        "December"
                    ],
                    "description": "Axis labels for month."
                },
                "characterWidth": {
                    "type": "integer",
                    "default": 6
                },
                "numberFormat": {
                    "type": "string",
                    "default": "s",
                    "description": "D3 Number format for axis labels and text tables."
                },
                "timeFormat": {
                    "type": "string",
                    "default": "%Y-%m-%d",
                    "description": "Date format for axis labels."
                },
                "useRawDomain": {
                    "type": "boolean",
                    "default": false,
                    "description": "Use the source data range as scale domain instead of aggregated data for aggregate axis. This option does not work with sum or count aggregateas they might have a substantially larger scale range.By default, use value from config.useRawDomain."
                }
            }
        }
    }
}