{
  "$schema": "https://vega.github.io/schema/vega/v5.json",
  "description": "A bar chart showing the US population distribution of age groups and gender in 2000.",
  "background": "white",
  "padding": 5,
  "height": 200,
  "style": "cell",
  "data": [
    {
      "name": "source_0",
      "url": "data/population.json",
      "format": {"type": "json"},
      "transform": [
        {"type": "filter", "expr": "datum.year == 2000"},
        {
          "type": "formula",
          "expr": "datum.sex == 2 ? 'Female' : 'Male'",
          "as": "gender"
        },
        {
          "type": "aggregate",
          "groupby": ["age", "people"],
          "ops": ["sum"],
          "fields": ["people"],
          "as": ["sum_people"]
        },
        {
          "type": "stack",
          "groupby": ["age"],
          "field": "sum_people",
          "sort": {"field": ["people"], "order": ["descending"]},
          "as": ["sum_people_start", "sum_people_end"],
          "offset": "zero"
        },
        {
          "type": "filter",
          "expr": "isValid(datum[\"people\"]) && isFinite(+datum[\"people\"])"
        }
      ]
    }
  ],
  "signals": [
    {"name": "x_step", "value": 17},
    {
      "name": "width",
      "update": "bandspace(domain('x').length, 0.1, 0.05) * x_step"
    }
  ],
  "marks": [
    {
      "name": "marks",
      "type": "rect",
      "style": ["bar"],
      "from": {"data": "source_0"},
      "encode": {
        "update": {
          "fill": {"value": "#4c78a8"},
          "opacity": {"scale": "opacity", "field": "people"},
          "ariaRoleDescription": {"value": "bar"},
          "description": {
            "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"sum_people\"], \"\")) + \"; people: \" + (format(datum[\"people\"], \"\"))"
          },
          "x": {"scale": "x", "field": "age"},
          "width": {"scale": "x", "band": 1},
          "y": {"scale": "y", "field": "sum_people_end"},
          "y2": {"scale": "y", "field": "sum_people_start"}
        }
      }
    }
  ],
  "scales": [
    {
      "name": "x",
      "type": "band",
      "domain": {"data": "source_0", "field": "age", "sort": true},
      "range": {"step": {"signal": "x_step"}},
      "paddingInner": 0.1,
      "paddingOuter": 0.05
    },
    {
      "name": "y",
      "type": "linear",
      "domain": {
        "data": "source_0",
        "fields": ["sum_people_start", "sum_people_end"]
      },
      "range": [{"signal": "height"}, 0],
      "nice": true,
      "zero": true
    },
    {
      "name": "opacity",
      "type": "linear",
      "domain": {"data": "source_0", "field": "people"},
      "range": [0.3, 0.8],
      "zero": false
    }
  ],
  "axes": [
    {
      "scale": "y",
      "orient": "left",
      "gridScale": "x",
      "grid": true,
      "tickCount": {"signal": "ceil(height/40)"},
      "domain": false,
      "labels": false,
      "aria": false,
      "maxExtent": 0,
      "minExtent": 0,
      "ticks": false,
      "zindex": 0
    },
    {
      "scale": "x",
      "orient": "bottom",
      "grid": false,
      "title": "age",
      "labelAlign": "right",
      "labelAngle": 270,
      "labelBaseline": "middle",
      "zindex": 0
    },
    {
      "scale": "y",
      "orient": "left",
      "grid": false,
      "title": "population",
      "labelOverlap": true,
      "tickCount": {"signal": "ceil(height/40)"},
      "zindex": 0
    }
  ],
  "legends": [
    {
      "opacity": "opacity",
      "symbolType": "square",
      "title": "people",
      "encode": {
        "symbols": {
          "update": {
            "fill": {"value": "#4c78a8"},
            "stroke": {"value": "transparent"}
          }
        }
      }
    }
  ]
}