-
Danyel Fisher authored86cee174
singleview_5_20_circular.vg.json 4.08 KiB
{
"$schema": "https://vega.github.io/schema/vega/v3.0.json",
"config":{"background":"#ffffff"},
"width": 810,
"height": 810,
"padding": 20,
"signals": [
{
"name": "labels", "value": true,
"bind": {"input": "checkbox"}
},
{
"name": "radius", "value": 260
},
{
"name": "links", "value": "diagonal",
"bind": {
"input": "radio",
"options": ["line", "curve", "diagonal"]
}
},
{ "name": "originX", "update": "width / 2" },
{ "name": "originY", "update": "height / 2" },
{
"name": "active", "value": null,
"on": [
{ "events": "text:mouseover, symbol:mouseover", "update": "datum.index" },
{ "events": "mouseover[!event.item]", "update": "null" }
]
},
{ "description": "throttles the number of nodes rendered; 77 covers 'all'",
"name": "numNodes", "value": 30 }
],
"data": [
{
"name": "nodes",
"url": "data/miserables.json",
"format": {"type": "json", "property": "nodes"},
"transform": [
{ "type": "filter",
"expr": "datum.index < numNodes" },
{"type": "collect", "sort": {"field": "group"}},
{"type": "pie", "as": ["_", "angle"]},
{
"type": "formula",
"expr": "originX + radius * cos(datum.angle)",
"as": "x"
},
{
"type": "formula",
"expr": "originY + radius * sin(datum.angle)",
"as": "y"
},
{
"type": "formula",
"expr": "inrange(datum.angle, [PI/2, 1.5*PI])",
"as": "leftside"
}
]
},
{
"name": "links",
"url": "data/miserables.json",
"format": {"type": "json", "property": "links"},
"transform": [
{ "type": "filter",
"expr": "datum.source < numNodes" },
{ "type": "filter",
"expr": "datum.target < numNodes" },
{
"type": "lookup",
"from": "nodes",
"key": "index",
"fields": ["source"],
"as": ["source"]
},
{
"type": "lookup",
"from": "nodes",
"key": "index",
"fields": ["target"],
"as": ["target"]
}
]
}
],
"scales": [
{
"name": "color",
"type": "ordinal",
"range": {"scheme": "category20"}
}
],
"marks": [
{
"type": "path",
"from": {"data": "links"},
"interactive": false,
"encode": {
"update": {
"stroke": [
{"test": "datum.source.index === active || datum.target.index === active", "value": "steelblue"},
{"value": "#111111"}
],
"strokeWidth": [
{"test": "datum.source.index === active || datum.target.index === active", "value": 2},
{"value": 1}
],
"strokeOpacity": { "value": 1 }
}
},
"transform": [
{
"type": "linkpath",
"shape": {"signal": "links"},
"sourceX": "datum.source.x", "sourceY": "datum.source.y",
"targetX": "datum.target.x", "targetY": "datum.target.y"
}
]
},
{
"type": "symbol",
"from": {"data": "nodes"},
"encode": {
"enter": {
"size": {"value": 100},
"stroke": {"value": "#fff"}
},
"update": {
"x": {"field": "x"},
"y": {"field": "y"},
"fill": {"scale": "color", "field": "group"}
}
}
},
{
"type": "text",
"from": {"data": "nodes"},
"encode": {
"enter": {
"text": {"field": "name"},
"fontSize": {"value": 14},
"baseline": {"value": "middle"}
},
"update": {
"x": {"field": "x"},
"y": {"field": "y"},
"dx": {"signal": "(datum.leftside ? -1 : 1) * 10"},
"angle": {"signal": "datum.leftside ? datum.angle/PI*180 - 180 : datum.angle/PI*180"},
"align": {"signal": "datum.leftside ? 'right' : 'left'"},
"opacity": {"signal": "labels ? 1 : 0"}
}
}
}
]
}