{
    "$schema": "https://vega.github.io/schema/vega/v5.json",
    "description": "Binned data chart example",
    "width": 300,
    "height": 200,
    "padding": 5,
    "data": [
        {
            "name": "table",
            "values": [
                {"dep": "F", "salary": 48},
                {"dep": "C", "salary": 33},
                {"dep": "E", "salary": 47},
                {"dep": "A", "salary": 25},
                {"dep": "H", "salary": 42},
                {"dep": "A", "salary": 22},
                {"dep": "G", "salary": 51},
                {"dep": "B", "salary": 34},
                {"dep": "D", "salary": 41},
                {"dep": "A", "salary": 22},
                {"dep": "A", "salary": 26}, 
                {"dep": "F", "salary": 38},
                {"dep": "C", "salary": 32},
                {"dep": "E", "salary": 41},
                {"dep": "A", "salary": 45},
                {"dep": "H", "salary": 52},
                {"dep": "A", "salary": 23},
                {"dep": "G", "salary": 27},
                {"dep": "B", "salary": 54},
                {"dep": "D", "salary": 31},
                {"dep": "A", "salary": 24},
                {"dep": "A", "salary": 26}
            ], 
            "transform": [
                {
                    "type": "extent",
                    "field": "salary",
                    "signal": "salaryExtent"
                },
                {
                    "type": "bin",
                    "extent": { "signal": "salaryExtent" },
                    "field": "salary",
                    "step": {"signal": "salaryBinStep"},
                    "as": [ "salaryFrom", "salaryTo" ]
                },
                {
                    "type": "aggregate",
                    "groupby": [ "salaryFrom", "salaryTo" ],
                    "ops": [ "count" ],
                    "as": [ "binCount" ]
                },
                {
                    "type": "collect",
                    "sort": { "field": "salaryFrom" }
                }
            ]
        }
    ],
    "signals": [
        {
            "name": "salaryBinStep", 
            "value": 10 
        }
    ],
    "scales": [
        {
            "name": "xscale",
            "type": "band",
            "domain": { "data": "table","field": "salaryFrom" },
            "range": "width",
            "padding": 0.1,
            "round": true
        },
        {
            "name": "yscale",
            "domain": { "data": "table", "field": "binCount" },
            "nice": true,
            "range": "height",
            "zero":true
        }
    ],
    "axes": [
        { 
            "orient": "bottom",
            "title": "Annual salary",  
            "titleFontSize":14,
            "scale": "xscale",
            "encode": {
                "labels": {
                    "update":{
                        "text": { 
                            "signal": "'['+ datum.value +'k -' + (datum.value+salaryBinStep) + 'k)'"
                        },
                        "fontSize":{ "value": 14 }                
                    }
                }
            } 
        },
        { 
            "orient": "left", 
            "scale": "yscale",  
            "tickCount":5,       
            "titleFontSize":14,     
            "title":"No. of Employees"
        }
    ],
    "marks": [
        {
            "type": "rect",
            "from": { "data": "table" },
            "encode": {
                "enter": {
                    "x": { "scale": "xscale", "field": "salaryFrom" },
                    "width": { "scale": "xscale", "band": 1 },
                    "y": { "scale": "yscale", "field": "binCount" },
                    "y2":{ "scale":"yscale", "value": 0 }
                },
                "update": {
                    "fill": { "value": "#a9d18e" }
                }
            }
        }
    ]
}