Skip to content

Instantly share code, notes, and snippets.

@anbnyc
Last active July 26, 2017 17:59
Show Gist options
  • Save anbnyc/0d1abfe6e9134708c57200187852e1d2 to your computer and use it in GitHub Desktop.
Save anbnyc/0d1abfe6e9134708c57200187852e1d2 to your computer and use it in GitHub Desktop.
Child growth charts in Vega

Growth charts data from WHO and CDC.

<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vega/3.0.0-beta.33/vega.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vega-embed/3.0.0-beta.17/vega-embed.js"></script>
</head>
<body>
<div id="vis"></div>
</body>
<script>
const spec = {
"$schema":"https://vega.github.io/schema/vega/v3.0.json",
"padding":5,
"data":[
{
"name":"growth",
"url":"https://api.myjson.com/bins/14q1qn"
}
],
"signals":[
{
"name":"yOffset",
"value":40
},
{
"name":"xOffset",
"value":40
},
{
"name":"cellHeight",
"value":300
},
{
"name":"cellWidth",
"value":400
},
{
"name":"height",
"update":"7.3 * (yOffset + cellHeight)"
},
{
"name": "width",
"update": "2.3 * (xOffset + cellWidth)"
}
],
"scales":[
{
"name":"ygroup",
"type":"band",
"range":[
0,
{
"signal":"height"
}
],
"domain":{
"data":"growth",
"field":"Percentile"
}
},
{
"name":"xgroup",
"type":"band",
"range":[
0,
{
"signal":"width"
}
],
"domain":{
"data":"growth",
"field":"Gender"
}
},
{
"name":"color",
"type":"ordinal",
"range":"category",
"domain":{
"data":"growth",
"fields":[
"Gender"
]
}
}
],
"marks":[
{
"name":"gen",
"type":"group",
"from":{
"facet":{
"name":"gen",
"data":"growth",
"groupby":[
"Gender",
"Percentile"
]
}
},
"encode":{
"enter":{
"y":{
"scale":"ygroup",
"field": "Percentile",
"offset": {"signal": "yOffset"}
},
"x":{
"scale": "xgroup",
"field": "Gender",
"offset": {"signal": "xOffset"}
},
"height":{
"signal":"cellHeight"
},
"width":{
"signal":"cellWidth"
}
}
},
"scales":[
{
"name":"yscale",
"type":"linear",
"domain":{
"data":"growth",
"field":"H"
},
"range":[
{
"signal":"cellHeight"
},
0
]
},
{
"name":"xscale",
"type":"linear",
"domain":{
"data":"growth",
"field":"W"
},
"range":[
0,
{
"signal": "cellWidth"
}
]
}
],
"axes":[
{
"orient":"top",
"scale":"xscale",
"grid":true,
"domain":false,
"encode":{
"domain":{
"enter":{
"stroke":{
"value":"transparent"
}
}
},
"labels":{
"enter":{
"align":{
"value":"left"
},
"baseline":{
"value":"top"
},
"fontSize":{
"value":12
}
}
}
}
},
{
"title":"Weight (kgs)",
"orient":"bottom",
"scale":"xscale",
"domain":false,
"ticks":false,
"labels":false
},
{
"orient":"left",
"scale":"yscale",
"grid":true,
"domain":false,
"encode":{
"domain":{
"enter":{
"stroke":{
"value":"transparent"
}
}
},
"labels":{
"enter":{
"align":{
"value":"left"
},
"baseline":{
"value":"bottom"
},
"fontSize":{
"value":12
}
}
}
}
},
{
"title":"Height (cms)",
"orient":"right",
"scale":"yscale",
"domain":false,
"ticks":false,
"labels":false
}
],
"marks":[
{
"type":"line",
"from":{
"data":"gen"
},
"encode":{
"enter":{
"interpolate":{
"value":"linear"
},
"x":{
"scale":"xscale",
"field":"W"
},
"y":{
"scale":"yscale",
"field":"H"
},
"stroke":{
"scale":"color",
"field":"Gender"
},
"strokeWidth":{
"value":1
}
}
}
},
{
"type":"symbol",
"from":{
"data":"gen"
},
"encode":{
"enter":{
"x":{
"scale":"xscale",
"field":"W"
},
"y":{
"scale":"yscale",
"field":"H"
},
"fill":{
"scale":"color",
"field":"Gender"
},
"strokeWidth":{
"value":0
},
"size":{
"value":10
}
}
}
},
{
"type": "text",
"from": {
"data": "gen"
},
"encode": {
"enter": {
"x": {"scale": "xscale", "field": "W"},
"y": {"scale": "yscale", "field": "H"},
"dx": {"value": -5},
"dy": {"value": 8},
"align": {"value": "right"},
"fill": {"value": "#000"},
"text": {"field": "Age"},
"angle": {"value": 45}
}
}
}
]
}
],
"axes": [
{
"orient":"top",
"scale":"xgroup",
"grid":false,
"ticks": false,
"encode":{
"domain":{
"enter":{
"stroke":{
"value":"transparent"
}
}
},
"labels":{
"enter":{
"align":{
"value":"left"
},
"baseline":{
"value":"top"
},
"fontWeight":{
"value":"bold"
}
}
}
}
},
{
"title":"Gender",
"orient":"top",
"scale":"xgroup",
"domain":false,
"ticks":false,
"labels":false
},
{
"orient":"left",
"scale":"ygroup",
"grid":false,
"ticks": false,
"encode":{
"domain":{
"enter":{
"stroke":{
"value":"transparent"
}
}
},
"labels":{
"enter":{
"align":{
"value":"right"
},
"baseline":{
"value":"bottom"
},
"fontWeight":{
"value":"bold"
}
}
}
}
},
{
"title":"Percentile",
"orient":"left",
"scale":"ygroup",
"domain":false,
"ticks":false,
"labels":false
}
]
};
vega.embed('#vis', spec);
</script>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment