Created
June 3, 2022 10:30
-
-
Save vasgat/4597ca60720ca2bc648879b320844c8a to your computer and use it in GitHub Desktop.
Vega spec Bee swarm with Unknowns
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"$schema": "https://vega.github.io/schema/vega/v5.json", | |
"description": "A beeswarm chart example that uses a force-directed layout to group items by category.", | |
"width": 950, | |
"height": 400, | |
"padding": {"left": 5, "right": 5, "top": 0, "bottom": 30}, | |
"background": "#ffefd9", | |
"autosize": "none", | |
"config": {"axis": {"labelFontSize": 15, "labelFont": "GothamNarrow"}}, | |
"signals": [ | |
{"name": "cx", "update": "width / 2"}, | |
{"name": "cy", "update": "height / 2"} | |
], | |
"data": [ | |
{ | |
"name": "turnover", | |
"url": "https://wikirate.org/Home_Office+Turnover_range+Answer.json?view=answer_list&limit=0" | |
}, | |
{ | |
"name": "revenue", | |
"url": "https://wikirate.org/Australian_Border_Force+Revenue_range+Answer.json?view=answer_list&limit=0" | |
}, | |
{ | |
"name": "garment_companies", | |
"url": "../assets/cached/MSA_Garment.json", | |
"transform": [{"type": "formula", "expr": "'Garment'", "as": "sector"}] | |
}, | |
{ | |
"name": "financial_companies", | |
"url": "../assets/cached/MSA_Financial.json", | |
"transform": [{"type": "formula", "expr": "'Financial'", "as": "sector"}] | |
}, | |
{ | |
"name": "hospitality_companies", | |
"url": "../assets/cached/MSA_Hospitality.json", | |
"transform": [ | |
{"type": "formula", "expr": "'Hospitality'", "as": "sector"} | |
] | |
}, | |
{ | |
"name": "companies", | |
"source": [ | |
"garment_companies", | |
"financial_companies", | |
"hospitality_companies" | |
] | |
}, | |
{ | |
"name": "assessed_statements", | |
"url": "https://wikirate.org/~12621772+Answer.json?view=answer_list&limit=0&filter[year]=latest&filter[value]=Yes", | |
"transform": [ | |
{ | |
"type": "lookup", | |
"from": "turnover", | |
"key": "company", | |
"fields": ["company"], | |
"values": ["value"], | |
"as": ["turnover"] | |
}, | |
{ | |
"type": "lookup", | |
"from": "revenue", | |
"key": "company", | |
"fields": ["company"], | |
"values": ["value"], | |
"as": ["revenue"] | |
}, | |
{ | |
"type": "lookup", | |
"from": "companies", | |
"key": "id", | |
"fields": ["company"], | |
"values": ["sector"], | |
"as": ["sector"] | |
}, | |
{ | |
"type": "formula", | |
"as": "size", | |
"expr": "if(datum.turnover == 'Under £36 million' || datum.turnover == '£36 million to £60 million' || datum.turnover == '£60 million to £100 million' || datum.revenue == 'AU$ 0-99M' || datum.revenue == 'AU$ 100-150M' || datum.revenue == 'AU$ 150-200M' || datum.revenue == 'AU$ 200-250M', 'Small','Unknown')" | |
}, | |
{ | |
"type": "formula", | |
"as": "size", | |
"expr": "if(datum.turnover == '£100 million to £500 million' || datum.revenue == 'AU$ 250-300M' == datum.revenue == 'AU$ 300-350M' || datum.revenue == 'AU$ 350-400M' || datum.revenue == 'AU$ 400-450M' || datum.revenue == 'AU$ 450-500M' || datum.revenue == 'AU$ 500-600M' || datum.revenue == 'AU$ 600-700M' || datum.revenue == 'AU$ 700-800M', 'Medium',datum.size)" | |
}, | |
{ | |
"type": "formula", | |
"as": "size", | |
"expr": "if(datum.turnover == 'Over £500 million' || datum.revenue == 'AU$ 800-900M' || datum.revenue == 'AU$ 900M-1BN' || datum.revenue == 'AU$ 1BN+', 'Large',datum.size)" | |
}, | |
{ | |
"type": "formula", | |
"as": "sector", | |
"expr": "datum.sector == null ? 'Other' : datum.sector" | |
} | |
] | |
}, | |
{ | |
"name": "statements", | |
"source": ["assessed_statements"], | |
"transform": [ | |
{ | |
"type": "lookup", | |
"from": "companies", | |
"key": "id", | |
"fields": ["company"], | |
"values": ["name", "headquarters"], | |
"as": ["name", "headquarters"] | |
}, | |
{ | |
"type": "formula", | |
"expr": "datum.revenue == null ? 'Unknown' : datum.revenue", | |
"as": "revenue" | |
}, | |
{ | |
"type": "formula", | |
"expr": "datum.turnover == null ? 'Unknown' : datum.turnover", | |
"as": "turnover" | |
} | |
] | |
} | |
], | |
"scales": [ | |
{ | |
"name": "xscale", | |
"type": "band", | |
"domain": { | |
"data": "statements", | |
"field": "size", | |
"sort": {"order": "descending"} | |
}, | |
"range": "width" | |
}, | |
{ | |
"name": "color", | |
"type": "ordinal", | |
"domain": {"data": "statements", "field": "sector"}, | |
"range": ["#ffdc00", "#DDDDE3", "#ff9300", "#000028"] | |
} | |
], | |
"axes": [ | |
{ | |
"orient": "bottom", | |
"scale": "xscale", | |
"domainWidth": {"value": 0}, | |
"ticks": false, | |
"encode": { | |
"labels": { | |
"interactive": true, | |
"update": { | |
"tooltip": { | |
"signal": "datum.label == 'Small'? {'turnover':'less than £100M','revenue': 'less than AU$ 250'} : (datum.label == 'Medium' ?{'turnover':'between £100M and £500M', 'revenue':'between AU$ 250M and AU$ 800M'}: {'turnover':'over £500M','revenue':'over than AU$ 800M'})" | |
} | |
} | |
} | |
} | |
} | |
], | |
"marks": [ | |
{ | |
"name": "nodes", | |
"type": "symbol", | |
"from": {"data": "statements"}, | |
"encode": { | |
"enter": { | |
"fill": {"scale": "color", "field": "sector"}, | |
"xfocus": {"scale": "xscale", "field": "size", "band": 0.5}, | |
"yfocus": {"signal": "cy"}, | |
"tooltip": { | |
"signal": "{'Company': datum.name,'Sector': datum.sector, 'turnover (range)' : datum.turnover, 'revenue':datum.revenue}" | |
} | |
}, | |
"update": { | |
"size": {"signal": "pow(2 * 5, 2)"}, | |
"stroke": {"value": "white"}, | |
"strokeWidth": {"value": 1}, | |
"zindex": {"value": 0} | |
}, | |
"hover": { | |
"stroke": {"value": "black"}, | |
"strokeWidth": {"value": 3}, | |
"zindex": {"value": 1} | |
} | |
}, | |
"transform": [ | |
{ | |
"type": "force", | |
"iterations": 200, | |
"static": false, | |
"forces": [ | |
{"force": "collide", "iterations": 1, "radius": 5}, | |
{"force": "x", "x": "xfocus", "strength": 0.2}, | |
{"force": "y", "y": "yfocus", "strength": 0.1} | |
] | |
} | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment