Hex cartogram Since 0.3.0
We love hex cartograms and this lets you make them.
Usage
To use this component in a Nunjucks template you would add the following (assumes you've loaded OI Lume Viz into componentNamespace: 'oi'
):
{% comp 'oi.map.hex_cartogram', { "config": config } %}{% endcomp %}
where config
is replaced by an object that contains some or all of these variables:
data
- (optional) Either a reference to a CSV file in the Lume site or an array of rows with named attributes. If used you will need to match this to the HexJSON IDs usingmatchKey
.columns
- As with many of the visualisation types you can optionally add virtual columns.hexjson
- (required) Either a reference to a HexJSON file in the Lume site or inline HexJSON.colours
- Define some visualisation-specific named colours.width
- An optional minimum width (e.g.400px
) for each panel. Panels may then be arranged by however many columns will fit in the page width.label
- The title of the column that will be used to get a label for the hexagon. Leave empty if you don't want labels on the hexes.value
- The title of the column that will be used to get the value of the panel. Alternatively it could be a named colour.matchKey
- The title of the column in the data that contains unique keys that match those used in the HexJSON.scale
- A colour scale to use to colour the hexes based on the value.min
- Used withscale
andmax
to define the colour scale.max
- Used withscale
andmin
to define the colour scale.legend
- Define the legend.tooltip
- Either a string, template string, or the column heading to use to build a tooltip.tools
- Add some useful interactive tools:filter
- A search tool to filter hexes:label
- The title of the column to use as the displayed name for a hex in the search results.max
- The maximum number of results to show.
slider
- A slider tool that will change the colouring of the hexes:columns
- An array of column titles to use to change the colouring of the hexes.
attribution
- Add a line of attribution text under the visualisation.
Examples
- A basic hex cartogram
- Hex labels
- Hexes with the same colour
- Hexes with defined colours
- Hexes with defined colours - data and hexes separately
- Hexes with defined colours - external hexes
- Hexes with defined colours - external hexes and data
- Hexes coloured by a colour scale
- Add a legend
- Custom tooltips
- Filter hexes
- Add an interactive slider
- Draw boundaries
- Big example
1. A basic hex cartogram§
A very simple hex cartogram that just shows the hexes.
This example was made with config
:
hexjson:
layout: odd-r
hexes:
E08000016:
'n': Barnsley
q: 0
r: -2
E08000032:
'n': Bradford
q: -1
r: 0
E08000033:
'n': Calderdale
q: -2
r: -1
E07000163:
'n': Craven
q: -2
r: 1
E07000165:
'n': Harrogate
q: -1
r: 1
E08000034:
'n': Kirklees
q: -1
r: -1
E08000035:
'n': Leeds
q: 0
r: 0
E07000169:
'n': Selby
q: 1
r: 0
E08000036:
'n': Wakefield
q: 0
r: -1
E06000014:
'n': York
q: 0
r: 1
{
"hexjson": {
"layout": "odd-r",
"hexes": {
"E08000016": {
"n": "Barnsley",
"q": 0,
"r": -2
},
"E08000032": {
"n": "Bradford",
"q": -1,
"r": 0
},
"E08000033": {
"n": "Calderdale",
"q": -2,
"r": -1
},
"E07000163": {
"n": "Craven",
"q": -2,
"r": 1
},
"E07000165": {
"n": "Harrogate",
"q": -1,
"r": 1
},
"E08000034": {
"n": "Kirklees",
"q": -1,
"r": -1
},
"E08000035": {
"n": "Leeds",
"q": 0,
"r": 0
},
"E07000169": {
"n": "Selby",
"q": 1,
"r": 0
},
"E08000036": {
"n": "Wakefield",
"q": 0,
"r": -1
},
"E06000014": {
"n": "York",
"q": 0,
"r": 1
}
}
}
}
2. Hex labels§
A very simple hex cartogram with a label
added to each hex. The label
value allows you to construct a string. In this example the labels are created from each hex's n
attribute and are limited to the first three characters.
This example was made with config
:
hexjson:
layout: odd-r
hexes:
E08000016:
'n': Barnsley
q: 0
r: -2
E08000032:
'n': Bradford
q: -1
r: 0
E08000033:
'n': Calderdale
q: -2
r: -1
E07000163:
'n': Craven
q: -2
r: 1
E07000165:
'n': Harrogate
q: -1
r: 1
E08000034:
'n': Kirklees
q: -1
r: -1
E08000035:
'n': Leeds
q: 0
r: 0
E07000169:
'n': Selby
q: 1
r: 0
E08000036:
'n': Wakefield
q: 0
r: -1
E06000014:
'n': York
q: 0
r: 1
label: '{{ n | slice(0,3) }}'
{
"hexjson": {
"layout": "odd-r",
"hexes": {
"E08000016": {
"n": "Barnsley",
"q": 0,
"r": -2
},
"E08000032": {
"n": "Bradford",
"q": -1,
"r": 0
},
"E08000033": {
"n": "Calderdale",
"q": -2,
"r": -1
},
"E07000163": {
"n": "Craven",
"q": -2,
"r": 1
},
"E07000165": {
"n": "Harrogate",
"q": -1,
"r": 1
},
"E08000034": {
"n": "Kirklees",
"q": -1,
"r": -1
},
"E08000035": {
"n": "Leeds",
"q": 0,
"r": 0
},
"E07000169": {
"n": "Selby",
"q": 1,
"r": 0
},
"E08000036": {
"n": "Wakefield",
"q": 0,
"r": -1
},
"E06000014": {
"n": "York",
"q": 0,
"r": 1
}
}
},
"label": "{{ n | slice(0,3) }}"
}
3. Hexes with the same colour§
A very simple hex cartogram where we define a custom colour named test
and then use that for the value
.
This example was made with config
:
colours:
test: '#999000'
hexjson:
layout: odd-r
hexes:
E08000016:
'n': Barnsley
q: 0
r: -2
E08000032:
'n': Bradford
q: -1
r: 0
E08000033:
'n': Calderdale
q: -2
r: -1
E07000163:
'n': Craven
q: -2
r: 1
E07000165:
'n': Harrogate
q: -1
r: 1
E08000034:
'n': Kirklees
q: -1
r: -1
E08000035:
'n': Leeds
q: 0
r: 0
E07000169:
'n': Selby
q: 1
r: 0
E08000036:
'n': Wakefield
q: 0
r: -1
E06000014:
'n': York
q: 0
r: 1
value: test
{
"colours": {
"test": "#999000"
},
"hexjson": {
"layout": "odd-r",
"hexes": {
"E08000016": {
"n": "Barnsley",
"q": 0,
"r": -2
},
"E08000032": {
"n": "Bradford",
"q": -1,
"r": 0
},
"E08000033": {
"n": "Calderdale",
"q": -2,
"r": -1
},
"E07000163": {
"n": "Craven",
"q": -2,
"r": 1
},
"E07000165": {
"n": "Harrogate",
"q": -1,
"r": 1
},
"E08000034": {
"n": "Kirklees",
"q": -1,
"r": -1
},
"E08000035": {
"n": "Leeds",
"q": 0,
"r": 0
},
"E07000169": {
"n": "Selby",
"q": 1,
"r": 0
},
"E08000036": {
"n": "Wakefield",
"q": 0,
"r": -1
},
"E06000014": {
"n": "York",
"q": 0,
"r": 1
}
}
},
"value": "test"
}
4. Hexes with defined colours§
A very simple hex cartogram. The colour of each hex is given by setting the value
key to the colour
property.
This example was made with config
:
hexjson:
layout: odd-r
hexes:
E08000016:
'n': Barnsley
colour: '#E6007C'
q: 0
r: -2
E08000032:
'n': Bradford
colour: '#FF6700'
q: -1
r: 0
E08000033:
'n': Calderdale
colour: '#0DBC37'
q: -2
r: -1
E07000163:
'n': Craven
colour: '#178CFF'
q: -2
r: 1
E07000165:
'n': Harrogate
colour: '#2f529f'
q: -1
r: 1
E08000034:
'n': Kirklees
colour: '#722EA5'
q: -1
r: -1
E08000035:
'n': Leeds
colour: '#F9BC26'
q: 0
r: 0
E07000169:
'n': Selby
colour: '#1DD3A7'
q: 1
r: 0
E08000036:
'n': Wakefield
colour: '#EF3AAB'
q: 0
r: -1
E06000014:
'n': York
colour: '#F92626'
q: 0
r: 1
value: colour
{
"hexjson": {
"layout": "odd-r",
"hexes": {
"E08000016": {
"n": "Barnsley",
"colour": "#E6007C",
"q": 0,
"r": -2
},
"E08000032": {
"n": "Bradford",
"colour": "#FF6700",
"q": -1,
"r": 0
},
"E08000033": {
"n": "Calderdale",
"colour": "#0DBC37",
"q": -2,
"r": -1
},
"E07000163": {
"n": "Craven",
"colour": "#178CFF",
"q": -2,
"r": 1
},
"E07000165": {
"n": "Harrogate",
"colour": "#2f529f",
"q": -1,
"r": 1
},
"E08000034": {
"n": "Kirklees",
"colour": "#722EA5",
"q": -1,
"r": -1
},
"E08000035": {
"n": "Leeds",
"colour": "#F9BC26",
"q": 0,
"r": 0
},
"E07000169": {
"n": "Selby",
"colour": "#1DD3A7",
"q": 1,
"r": 0
},
"E08000036": {
"n": "Wakefield",
"colour": "#EF3AAB",
"q": 0,
"r": -1
},
"E06000014": {
"n": "York",
"colour": "#F92626",
"q": 0,
"r": 1
}
}
},
"value": "colour"
}
5. Hexes with defined colours - data and hexes separately§
This is the same as the previous example except we pass a data
array which sets properties for each hex rather than set those in the HexJSON. We use matchKey
to match the key in hexjson → hexes
with the required key in a data
array item. We also customise the label for each hex to be the first letter.
This example was made with config
:
hexjson:
layout: odd-r
hexes:
E08000016:
'n': Barnsley
q: 0
r: -2
E08000032:
'n': Bradford
q: -1
r: 0
E08000033:
'n': Calderdale
q: -2
r: -1
E07000163:
'n': Craven
q: -2
r: 1
E07000165:
'n': Harrogate
q: -1
r: 1
E08000034:
'n': Kirklees
q: -1
r: -1
E08000035:
'n': Leeds
q: 0
r: 0
E07000169:
'n': Selby
q: 1
r: 0
E08000036:
'n': Wakefield
q: 0
r: -1
E06000014:
'n': York
q: 0
r: 1
data:
- code: E08000016
colour: '#E6007C'
- code: E08000032
colour: '#FF6700'
- code: E08000033
colour: '#0DBC37'
- code: E07000163
colour: '#178CFF'
- code: E07000165
colour: '#2f529f'
- code: E08000034
colour: '#722EA5'
- code: E08000035
colour: '#F9BC26'
- code: E07000169
colour: '#1DD3A7'
- code: E08000036
colour: '#EF3AAB'
- code: E06000014
colour: '#F92626'
matchKey: code
value: colour
{
"hexjson": {
"layout": "odd-r",
"hexes": {
"E08000016": {
"n": "Barnsley",
"q": 0,
"r": -2
},
"E08000032": {
"n": "Bradford",
"q": -1,
"r": 0
},
"E08000033": {
"n": "Calderdale",
"q": -2,
"r": -1
},
"E07000163": {
"n": "Craven",
"q": -2,
"r": 1
},
"E07000165": {
"n": "Harrogate",
"q": -1,
"r": 1
},
"E08000034": {
"n": "Kirklees",
"q": -1,
"r": -1
},
"E08000035": {
"n": "Leeds",
"q": 0,
"r": 0
},
"E07000169": {
"n": "Selby",
"q": 1,
"r": 0
},
"E08000036": {
"n": "Wakefield",
"q": 0,
"r": -1
},
"E06000014": {
"n": "York",
"q": 0,
"r": 1
}
}
},
"data": [{
"code": "E08000016",
"colour": "#E6007C"
},{
"code": "E08000032",
"colour": "#FF6700"
},{
"code": "E08000033",
"colour": "#0DBC37"
},{
"code": "E07000163",
"colour": "#178CFF"
},{
"code": "E07000165",
"colour": "#2f529f"
},{
"code": "E08000034",
"colour": "#722EA5"
},{
"code": "E08000035",
"colour": "#F9BC26"
},{
"code": "E07000169",
"colour": "#1DD3A7"
},{
"code": "E08000036",
"colour": "#EF3AAB"
},{
"code": "E06000014",
"colour": "#F92626"
}],
"matchKey": "code",
"value": "colour"
}
6. Hexes with defined colours - external hexes§
If you are using the same HexJSON layout in multiple places it makes sense not to have to repeat that layout every time. To help with this you can specify where the appropriate hexjson
is.
This example was made with config
:
hexjson: hexjson.yorks
data:
- code: E08000016
colour: '#FF6700'
- code: E08000032
colour: '#F9BC26'
- code: E08000033
colour: '#F9BC26'
- code: E07000163
colour: '#1DD3A7'
- code: E07000165
colour: '#1DD3A7'
- code: E08000034
colour: '#F9BC26'
- code: E08000035
colour: '#F9BC26'
- code: E07000169
colour: '#1DD3A7'
- code: E08000036
colour: '#F9BC26'
- code: E06000014
colour: '#1DD3A7'
matchKey: code
value: colour
{
"hexjson": "hexjson.yorks",
"data": [{
"code": "E08000016",
"colour": "#FF6700"
},{
"code": "E08000032",
"colour": "#F9BC26"
},{
"code": "E08000033",
"colour": "#F9BC26"
},{
"code": "E07000163",
"colour": "#1DD3A7"
},{
"code": "E07000165",
"colour": "#1DD3A7"
},{
"code": "E08000034",
"colour": "#F9BC26"
},{
"code": "E08000035",
"colour": "#F9BC26"
},{
"code": "E07000169",
"colour": "#1DD3A7"
},{
"code": "E08000036",
"colour": "#F9BC26"
},{
"code": "E06000014",
"colour": "#1DD3A7"
}],
"matchKey": "code",
"value": "colour"
}
7. Hexes with defined colours - external hexes and data§
Similarly, you can specify where the data
are stored rather that explicitly include them in the YAML.
This example was made with config
:
hexjson: hexjson.yorks
data: test.data.hex_yorks
matchKey: code
value: colour
{
"hexjson": "hexjson.yorks",
"data": "test.data.hex_yorks",
"matchKey": "code",
"value": "colour"
}
8. Hexes coloured by a colour scale§
The same hex layout as above but this time we colour the hexes by a defined scale
with an optional min
and max
. The colour scale
is a comma separated string of colour stops each of the form rgb(r,g,b) x%
in the style of a CSS linear gradient.
This example was made with config
:
hexjson: hexjson.yorks
data:
- code: E08000016
LAD21NM: Barnsley
Aged 15 years and under: 44782
- code: E08000032
LAD21NM: Bradford
Aged 15 years and under: 124837
- code: E08000033
LAD21NM: Calderdale
Aged 15 years and under: 39997
- code: E07000163
LAD21NM: Craven
Aged 15 years and under: 8643
- code: E07000165
LAD21NM: Harrogate
Aged 15 years and under: 27362
- code: E08000034
LAD21NM: Kirklees
Aged 15 years and under: 86941
- code: E08000035
LAD21NM: Leeds
Aged 15 years and under: 153483
- code: E07000169
LAD21NM: Selby
Aged 15 years and under: 16556
- code: E08000036
LAD21NM: Wakefield
Aged 15 years and under: 65832
- code: E06000014
LAD21NM: York
Aged 15 years and under: 30738
matchKey: code
value: Aged 15 years and under
scale: Viridis
{
"hexjson": "hexjson.yorks",
"data": [{
"code": "E08000016",
"LAD21NM": "Barnsley",
"Aged 15 years and under": 44782
},{
"code": "E08000032",
"LAD21NM": "Bradford",
"Aged 15 years and under": 124837
},{
"code": "E08000033",
"LAD21NM": "Calderdale",
"Aged 15 years and under": 39997
},{
"code": "E07000163",
"LAD21NM": "Craven",
"Aged 15 years and under": 8643
},{
"code": "E07000165",
"LAD21NM": "Harrogate",
"Aged 15 years and under": 27362
},{
"code": "E08000034",
"LAD21NM": "Kirklees",
"Aged 15 years and under": 86941
},{
"code": "E08000035",
"LAD21NM": "Leeds",
"Aged 15 years and under": 153483
},{
"code": "E07000169",
"LAD21NM": "Selby",
"Aged 15 years and under": 16556
},{
"code": "E08000036",
"LAD21NM": "Wakefield",
"Aged 15 years and under": 65832
},{
"code": "E06000014",
"LAD21NM": "York",
"Aged 15 years and under": 30738
}],
"matchKey": "code",
"value": "Aged 15 years and under",
"scale": "Viridis"
}
9. Add a legend§
The same hex layout as above but this time we colour the hexes by a defined scale
with an optional min
and max
. The colour scale
is a comma separated string of colour stops each of the form rgb(r,g,b) x%
in the style of a CSS linear gradient.
We also define a legend
with 5 levels - three of the levels are given labels. We customise the tooltip
labels.
This example was made with config
:
hexjson: hexjson.yorks
data:
- code: E08000016
LAD21NM: Barnsley
colour: '#E6007C'
Aged 15 years and under: 44782
- code: E08000032
LAD21NM: Bradford
colour: '#FF6700'
Aged 15 years and under: 124837
- code: E08000033
LAD21NM: Calderdale
colour: '#0DBC37'
Aged 15 years and under: 39997
- code: E07000163
LAD21NM: Craven
colour: '#178CFF'
Aged 15 years and under: 8643
- code: E07000165
LAD21NM: Harrogate
colour: '#2f529f'
Aged 15 years and under: 27362
- code: E08000034
LAD21NM: Kirklees
colour: '#722EA5'
Aged 15 years and under: 86941
- code: E08000035
LAD21NM: Leeds
colour: '#F9BC26'
Aged 15 years and under: 153483
- code: E07000169
LAD21NM: Selby
colour: '#1DD3A7'
Aged 15 years and under: 16556
- code: E08000036
LAD21NM: Wakefield
colour: '#EF3AAB'
Aged 15 years and under: 65832
- code: E06000014
LAD21NM: York
colour: '#F92626'
Aged 15 years and under: 30738
value: Aged 15 years and under
matchKey: code
scale: Viridis
min: 0
max: 160000
legend:
position: top right
items:
- value: 160000
label: 160k
- value: 120000
label: ''
- value: 80000
label: 80k
- value: 40000
label: ''
- value: 0
label: '0'
{
"hexjson": "hexjson.yorks",
"data": [{
"code": "E08000016",
"LAD21NM": "Barnsley",
"colour": "#E6007C",
"Aged 15 years and under": 44782
},{
"code": "E08000032",
"LAD21NM": "Bradford",
"colour": "#FF6700",
"Aged 15 years and under": 124837
},{
"code": "E08000033",
"LAD21NM": "Calderdale",
"colour": "#0DBC37",
"Aged 15 years and under": 39997
},{
"code": "E07000163",
"LAD21NM": "Craven",
"colour": "#178CFF",
"Aged 15 years and under": 8643
},{
"code": "E07000165",
"LAD21NM": "Harrogate",
"colour": "#2f529f",
"Aged 15 years and under": 27362
},{
"code": "E08000034",
"LAD21NM": "Kirklees",
"colour": "#722EA5",
"Aged 15 years and under": 86941
},{
"code": "E08000035",
"LAD21NM": "Leeds",
"colour": "#F9BC26",
"Aged 15 years and under": 153483
},{
"code": "E07000169",
"LAD21NM": "Selby",
"colour": "#1DD3A7",
"Aged 15 years and under": 16556
},{
"code": "E08000036",
"LAD21NM": "Wakefield",
"colour": "#EF3AAB",
"Aged 15 years and under": 65832
},{
"code": "E06000014",
"LAD21NM": "York",
"colour": "#F92626",
"Aged 15 years and under": 30738
}],
"value": "Aged 15 years and under",
"matchKey": "code",
"scale": "Viridis",
"min": 0,
"max": 160000,
"legend": {
"position": "top right",
"items": [{
"value": 160000,
"label": "160k"
},{
"value": 120000,
"label": ""
},{
"value": 80000,
"label": "80k"
},{
"value": 40000,
"label": ""
},{
"value": 0,
"label": "0"
}]
}
}
10. Custom tooltips§
Colours are set in the HexJSON. We define a tooltip
and use a matchKey
to define the key in the data
to match against a hex. The tooltip
can contain replacement values of the form {{ key }}
.
This example was made with config
:
hexjson:
layout: odd-r
hexes:
E08000016:
'n': Barnsley
colour: '#E6007C'
q: 0
r: -2
E08000032:
'n': Bradford
colour: '#FF6700'
q: -1
r: 0
E08000033:
'n': Calderdale
colour: '#0DBC37'
q: -2
r: -1
E07000163:
'n': Craven
colour: '#178CFF'
q: -2
r: 1
E07000165:
'n': Harrogate
colour: '#2f529f'
q: -1
r: 1
E08000034:
'n': Kirklees
colour: '#722EA5'
q: -1
r: -1
E08000035:
'n': Leeds
colour: '#F9BC26'
q: 0
r: 0
E07000169:
'n': Selby
colour: '#1DD3A7'
q: 1
r: 0
E08000036:
'n': Wakefield
colour: '#EF3AAB'
q: 0
r: -1
E06000014:
'n': York
colour: '#F92626'
q: 0
r: 1
data:
- code: E08000016
LAD21NM: Barnsley
Aged 15 years and under: 44782
- code: E08000032
LAD21NM: Bradford
Aged 15 years and under: 124837
- code: E08000033
LAD21NM: Calderdale
Aged 15 years and under: 39997
- code: E07000163
LAD21NM: Craven
Aged 15 years and under: 8643
- code: E07000165
LAD21NM: Harrogate
Aged 15 years and under: 27362
- code: E08000034
LAD21NM: Kirklees
Aged 15 years and under: 86941
- code: E08000035
LAD21NM: Leeds
Aged 15 years and under: 153483
- code: E07000169
LAD21NM: Selby
Aged 15 years and under: 16556
- code: E08000036
LAD21NM: Wakefield
Aged 15 years and under: 65832
- code: E06000014
LAD21NM: York
Aged 15 years and under: 30738
value: colour
matchKey: code
tooltip: >-
{{ LAD21NM }}<br />Aged 15 and under: {{ Aged 15 years and under |
toLocaleString() }}
{
"hexjson": {
"layout": "odd-r",
"hexes": {
"E08000016": {
"n": "Barnsley",
"colour": "#E6007C",
"q": 0,
"r": -2
},
"E08000032": {
"n": "Bradford",
"colour": "#FF6700",
"q": -1,
"r": 0
},
"E08000033": {
"n": "Calderdale",
"colour": "#0DBC37",
"q": -2,
"r": -1
},
"E07000163": {
"n": "Craven",
"colour": "#178CFF",
"q": -2,
"r": 1
},
"E07000165": {
"n": "Harrogate",
"colour": "#2f529f",
"q": -1,
"r": 1
},
"E08000034": {
"n": "Kirklees",
"colour": "#722EA5",
"q": -1,
"r": -1
},
"E08000035": {
"n": "Leeds",
"colour": "#F9BC26",
"q": 0,
"r": 0
},
"E07000169": {
"n": "Selby",
"colour": "#1DD3A7",
"q": 1,
"r": 0
},
"E08000036": {
"n": "Wakefield",
"colour": "#EF3AAB",
"q": 0,
"r": -1
},
"E06000014": {
"n": "York",
"colour": "#F92626",
"q": 0,
"r": 1
}
}
},
"data": [{
"code": "E08000016",
"LAD21NM": "Barnsley",
"Aged 15 years and under": 44782
},{
"code": "E08000032",
"LAD21NM": "Bradford",
"Aged 15 years and under": 124837
},{
"code": "E08000033",
"LAD21NM": "Calderdale",
"Aged 15 years and under": 39997
},{
"code": "E07000163",
"LAD21NM": "Craven",
"Aged 15 years and under": 8643
},{
"code": "E07000165",
"LAD21NM": "Harrogate",
"Aged 15 years and under": 27362
},{
"code": "E08000034",
"LAD21NM": "Kirklees",
"Aged 15 years and under": 86941
},{
"code": "E08000035",
"LAD21NM": "Leeds",
"Aged 15 years and under": 153483
},{
"code": "E07000169",
"LAD21NM": "Selby",
"Aged 15 years and under": 16556
},{
"code": "E08000036",
"LAD21NM": "Wakefield",
"Aged 15 years and under": 65832
},{
"code": "E06000014",
"LAD21NM": "York",
"Aged 15 years and under": 30738
}],
"value": "colour",
"matchKey": "code",
"tooltip": "{{ LAD21NM }}<br />Aged 15 and under: {{ Aged 15 years and under | toLocaleString() }}"
}
11. Filter hexes§
We can add an interactive filter
to our hex map. We can set tools → filter → label
to the name
of a column in the data - this defines the text used in the filter drop-down list. We can set the maximum number of results to show in the filter drop down using tools → filter → max
.
This example was made with config
:
hexjson:
layout: odd-r
hexes:
E08000016:
'n': Barnsley
colour: '#E6007C'
q: 0
r: -2
E08000032:
'n': Bradford
colour: '#FF6700'
q: -1
r: 0
E08000033:
'n': Calderdale
colour: '#0DBC37'
q: -2
r: -1
E07000163:
'n': Craven
colour: '#178CFF'
q: -2
r: 1
E07000165:
'n': Harrogate
colour: '#2f529f'
q: -1
r: 1
E08000034:
'n': Kirklees
colour: '#722EA5'
q: -1
r: -1
E08000035:
'n': Leeds
colour: '#F9BC26'
q: 0
r: 0
E07000169:
'n': Selby
colour: '#1DD3A7'
q: 1
r: 0
E08000036:
'n': Wakefield
colour: '#EF3AAB'
q: 0
r: -1
E06000014:
'n': York
colour: '#F92626'
q: 0
r: 1
data:
- '2016': 433
'2017': 450
'2018': 520
'2019': 450
'2020': 475
'2021': 475
code: E08000016
LAD21NM: Barnsley
- '2016': 475
'2017': 495
'2018': 495
'2019': 500
'2020': 500
'2021': 525
code: E08000032
LAD21NM: Bradford
- '2016': 475
'2017': 495
'2018': 495
'2019': 495
'2020': 495
'2021': 500
code: E08000033
LAD21NM: Calderdale
- '2016': 550
'2017': 560
'2018': 550
'2019': 575
'2020': 575
'2021': 580
code: E07000163
LAD21NM: Craven
- '2016': 700
'2017': 720
'2018': 725
'2019': 725
'2020': 745
'2021': 750
code: E07000165
LAD21NM: Harrogate
- '2016': 475
'2017': 495
'2018': 495
'2019': 500
'2020': 500
'2021': 525
code: E08000034
LAD21NM: Kirklees
- '2016': 600
'2017': 650
'2018': 671
'2019': 675
'2020': 725
'2021': 700
code: E08000035
LAD21NM: Leeds
- '2016': 550
'2017': 550
'2018': 550
'2019': 570
'2020': 595
'2021': 595
code: E07000169
LAD21NM: Selby
- '2016': 500
'2017': 520
'2018': 525
'2019': 525
'2020': 550
'2021': 550
code: E08000036
LAD21NM: Wakefield
- '2016': 700
'2017': 745
'2018': 795
'2019': 775
'2020': 750
'2021': 780
code: E06000014
LAD21NM: York
columns:
- name: filterLabel
template: '{{ LAD21NM }} ({{ code }})'
value: 2021
scale: Viridis
matchKey: code
tools:
filter:
label: filterLabel
position: top left
tooltip: >-
<strong>{{ LAD21NM }}</strong><br />Median private sector rents<br />2021:
<strong>£{{ 2021 | toLocaleString() }}</strong>
attribution: >
Data: <a
href="https://www.westyorks-ca.gov.uk/media/8790/lcr-housing-delivery-monitoring-report-2020-21-4.pdf">West
Yorkshire Combined Authority</a>
{
"hexjson": {
"layout": "odd-r",
"hexes": {
"E08000016": {
"n": "Barnsley",
"colour": "#E6007C",
"q": 0,
"r": -2
},
"E08000032": {
"n": "Bradford",
"colour": "#FF6700",
"q": -1,
"r": 0
},
"E08000033": {
"n": "Calderdale",
"colour": "#0DBC37",
"q": -2,
"r": -1
},
"E07000163": {
"n": "Craven",
"colour": "#178CFF",
"q": -2,
"r": 1
},
"E07000165": {
"n": "Harrogate",
"colour": "#2f529f",
"q": -1,
"r": 1
},
"E08000034": {
"n": "Kirklees",
"colour": "#722EA5",
"q": -1,
"r": -1
},
"E08000035": {
"n": "Leeds",
"colour": "#F9BC26",
"q": 0,
"r": 0
},
"E07000169": {
"n": "Selby",
"colour": "#1DD3A7",
"q": 1,
"r": 0
},
"E08000036": {
"n": "Wakefield",
"colour": "#EF3AAB",
"q": 0,
"r": -1
},
"E06000014": {
"n": "York",
"colour": "#F92626",
"q": 0,
"r": 1
}
}
},
"data": [{
"2016": 433,
"2017": 450,
"2018": 520,
"2019": 450,
"2020": 475,
"2021": 475,
"code": "E08000016",
"LAD21NM": "Barnsley"
},{
"2016": 475,
"2017": 495,
"2018": 495,
"2019": 500,
"2020": 500,
"2021": 525,
"code": "E08000032",
"LAD21NM": "Bradford"
},{
"2016": 475,
"2017": 495,
"2018": 495,
"2019": 495,
"2020": 495,
"2021": 500,
"code": "E08000033",
"LAD21NM": "Calderdale"
},{
"2016": 550,
"2017": 560,
"2018": 550,
"2019": 575,
"2020": 575,
"2021": 580,
"code": "E07000163",
"LAD21NM": "Craven"
},{
"2016": 700,
"2017": 720,
"2018": 725,
"2019": 725,
"2020": 745,
"2021": 750,
"code": "E07000165",
"LAD21NM": "Harrogate"
},{
"2016": 475,
"2017": 495,
"2018": 495,
"2019": 500,
"2020": 500,
"2021": 525,
"code": "E08000034",
"LAD21NM": "Kirklees"
},{
"2016": 600,
"2017": 650,
"2018": 671,
"2019": 675,
"2020": 725,
"2021": 700,
"code": "E08000035",
"LAD21NM": "Leeds"
},{
"2016": 550,
"2017": 550,
"2018": 550,
"2019": 570,
"2020": 595,
"2021": 595,
"code": "E07000169",
"LAD21NM": "Selby"
},{
"2016": 500,
"2017": 520,
"2018": 525,
"2019": 525,
"2020": 550,
"2021": 550,
"code": "E08000036",
"LAD21NM": "Wakefield"
},{
"2016": 700,
"2017": 745,
"2018": 795,
"2019": 775,
"2020": 750,
"2021": 780,
"code": "E06000014",
"LAD21NM": "York"
}],
"columns": [{
"name": "filterLabel",
"template": "{{ LAD21NM }} ({{ code }})"
}],
"value": 2021,
"scale": "Viridis",
"matchKey": "code",
"tools": {
"filter": {
"label": "filterLabel",
"position": "top left"
}
},
"tooltip": "<strong>{{ LAD21NM }}</strong><br />Median private sector rents<br />2021: <strong>£{{ 2021 | toLocaleString() }}</strong>",
"attribution": "Data: <a href=\"https://www.westyorks-ca.gov.uk/media/8790/lcr-housing-delivery-monitoring-report-2020-21-4.pdf\">West Yorkshire Combined Authority</a>\n"
}
12. Add an interactive slider§
Sometimes you may have multi-epoch data. If you want the person viewing the page to be able to see these different epochs on the same cartogram, you can add an interactive slider
. To define which columns to use we pass an ordered array to tools → slider → columns
. In this example we have numeric data for the years 2016 to 2021 so we will set it to [2016,2017,2018,2019,2020,2021]
.
In the previous example we used 2021
in the tooltip
to reference the column that the value
was taken from. But now the active column depends on the slider position. We need to refer to the current value
differently; use the special replacement {{ _value }}
to access the active data column.
This example was made with config
:
width: 500
hexjson:
layout: odd-r
hexes:
E08000016:
'n': Barnsley
colour: '#E6007C'
q: 0
r: -2
E08000032:
'n': Bradford
colour: '#FF6700'
q: -1
r: 0
E08000033:
'n': Calderdale
colour: '#0DBC37'
q: -2
r: -1
E07000163:
'n': Craven
colour: '#178CFF'
q: -2
r: 1
E07000165:
'n': Harrogate
colour: '#2f529f'
q: -1
r: 1
E08000034:
'n': Kirklees
colour: '#722EA5'
q: -1
r: -1
E08000035:
'n': Leeds
colour: '#F9BC26'
q: 0
r: 0
E07000169:
'n': Selby
colour: '#1DD3A7'
q: 1
r: 0
E08000036:
'n': Wakefield
colour: '#EF3AAB'
q: 0
r: -1
E06000014:
'n': York
colour: '#F92626'
q: 0
r: 1
data:
- '2016': 433
'2017': 450
'2018': 520
'2019': 450
'2020': 475
'2021': 475
code: E08000016
LAD21NM: Barnsley
- '2016': 475
'2017': 495
'2018': 495
'2019': 500
'2020': 500
'2021': 525
code: E08000032
LAD21NM: Bradford
- '2016': 475
'2017': 495
'2018': 495
'2019': 495
'2020': 495
'2021': 500
code: E08000033
LAD21NM: Calderdale
- '2016': 550
'2017': 560
'2018': 550
'2019': 575
'2020': 575
'2021': 580
code: E07000163
LAD21NM: Craven
- '2016': 700
'2017': 720
'2018': 725
'2019': 725
'2020': 745
'2021': 750
code: E07000165
LAD21NM: Harrogate
- '2016': 475
'2017': 495
'2018': 495
'2019': 500
'2020': 500
'2021': 525
code: E08000034
LAD21NM: Kirklees
- '2016': 600
'2017': 650
'2018': 671
'2019': 675
'2020': 725
'2021': 700
code: E08000035
LAD21NM: Leeds
- '2016': 550
'2017': 550
'2018': 550
'2019': 570
'2020': 595
'2021': 595
code: E07000169
LAD21NM: Selby
- '2016': 500
'2017': 520
'2018': 525
'2019': 525
'2020': 550
'2021': 550
code: E08000036
LAD21NM: Wakefield
- '2016': 700
'2017': 745
'2018': 795
'2019': 775
'2020': 750
'2021': 780
code: E06000014
LAD21NM: York
columns:
- name: filterLabel
template: '{{ LAD21NM }} ({{ code }})'
value: 2019
scale: Viridis
matchKey: code
tools:
slider:
columns:
- '2016'
- '2017'
- '2018'
- '2019'
- '2020'
- '2021'
width: 500px
position: bottom
tooltip: >-
<strong>{{ LAD21NM }}</strong><br />Median private sector rents<br />{{ _value
}}: <strong>£{{ {{ _value }} | toLocaleString() }}</strong>
attribution: >
Data: <a
href="https://www.westyorks-ca.gov.uk/media/8790/lcr-housing-delivery-monitoring-report-2020-21-4.pdf">West
Yorkshire Combined Authority</a>
{
"width": 500,
"hexjson": {
"layout": "odd-r",
"hexes": {
"E08000016": {
"n": "Barnsley",
"colour": "#E6007C",
"q": 0,
"r": -2
},
"E08000032": {
"n": "Bradford",
"colour": "#FF6700",
"q": -1,
"r": 0
},
"E08000033": {
"n": "Calderdale",
"colour": "#0DBC37",
"q": -2,
"r": -1
},
"E07000163": {
"n": "Craven",
"colour": "#178CFF",
"q": -2,
"r": 1
},
"E07000165": {
"n": "Harrogate",
"colour": "#2f529f",
"q": -1,
"r": 1
},
"E08000034": {
"n": "Kirklees",
"colour": "#722EA5",
"q": -1,
"r": -1
},
"E08000035": {
"n": "Leeds",
"colour": "#F9BC26",
"q": 0,
"r": 0
},
"E07000169": {
"n": "Selby",
"colour": "#1DD3A7",
"q": 1,
"r": 0
},
"E08000036": {
"n": "Wakefield",
"colour": "#EF3AAB",
"q": 0,
"r": -1
},
"E06000014": {
"n": "York",
"colour": "#F92626",
"q": 0,
"r": 1
}
}
},
"data": [{
"2016": 433,
"2017": 450,
"2018": 520,
"2019": 450,
"2020": 475,
"2021": 475,
"code": "E08000016",
"LAD21NM": "Barnsley"
},{
"2016": 475,
"2017": 495,
"2018": 495,
"2019": 500,
"2020": 500,
"2021": 525,
"code": "E08000032",
"LAD21NM": "Bradford"
},{
"2016": 475,
"2017": 495,
"2018": 495,
"2019": 495,
"2020": 495,
"2021": 500,
"code": "E08000033",
"LAD21NM": "Calderdale"
},{
"2016": 550,
"2017": 560,
"2018": 550,
"2019": 575,
"2020": 575,
"2021": 580,
"code": "E07000163",
"LAD21NM": "Craven"
},{
"2016": 700,
"2017": 720,
"2018": 725,
"2019": 725,
"2020": 745,
"2021": 750,
"code": "E07000165",
"LAD21NM": "Harrogate"
},{
"2016": 475,
"2017": 495,
"2018": 495,
"2019": 500,
"2020": 500,
"2021": 525,
"code": "E08000034",
"LAD21NM": "Kirklees"
},{
"2016": 600,
"2017": 650,
"2018": 671,
"2019": 675,
"2020": 725,
"2021": 700,
"code": "E08000035",
"LAD21NM": "Leeds"
},{
"2016": 550,
"2017": 550,
"2018": 550,
"2019": 570,
"2020": 595,
"2021": 595,
"code": "E07000169",
"LAD21NM": "Selby"
},{
"2016": 500,
"2017": 520,
"2018": 525,
"2019": 525,
"2020": 550,
"2021": 550,
"code": "E08000036",
"LAD21NM": "Wakefield"
},{
"2016": 700,
"2017": 745,
"2018": 795,
"2019": 775,
"2020": 750,
"2021": 780,
"code": "E06000014",
"LAD21NM": "York"
}],
"columns": [{
"name": "filterLabel",
"template": "{{ LAD21NM }} ({{ code }})"
}],
"value": 2019,
"scale": "Viridis",
"matchKey": "code",
"tools": {
"slider": {
"columns": [
"2016",
"2017",
"2018",
"2019",
"2020",
"2021"
],
"width": "500px",
"position": "bottom"
}
},
"tooltip": "<strong>{{ LAD21NM }}</strong><br />Median private sector rents<br />{{ _value }}: <strong>£{{ {{ _value }} | toLocaleString() }}</strong>",
"attribution": "Data: <a href=\"https://www.westyorks-ca.gov.uk/media/8790/lcr-housing-delivery-monitoring-report-2020-21-4.pdf\">West Yorkshire Combined Authority</a>\n"
}
13. Draw boundaries§
We can add styled boundaries
to our hex map if our HexJSON contains boundaries
. To style the boundaries we build a dictionary boundaries
where each dictionary item is either:
- the properties to apply to a boundary sharing that key
- a reference to another boundary key (so we can re-use the same properties multiple times)
- a reference to the
type
property of a HexJSON boundary
If there are no properties for a particular style it won't be drawn.
This example was made with config
:
hexjson:
layout: odd-r
hexes:
E08000016:
'n': Barnsley
colour: '#E6007C'
q: 0
r: -2
E08000032:
'n': Bradford
colour: '#FF6700'
q: -1
r: 0
E08000033:
'n': Calderdale
colour: '#0DBC37'
q: -2
r: -1
E07000163:
'n': Craven
colour: '#178CFF'
q: -2
r: 1
E07000165:
'n': Harrogate
colour: '#2f529f'
q: -1
r: 1
E08000034:
'n': Kirklees
colour: '#722EA5'
q: -1
r: -1
E08000035:
'n': Leeds
colour: '#F9BC26'
q: 0
r: 0
E07000169:
'n': Selby
colour: '#1DD3A7'
q: 1
r: 0
E08000036:
'n': Wakefield
colour: '#EF3AAB'
q: 0
r: -1
E06000014:
'n': York
colour: '#F92626'
q: 0
r: 1
boundaries:
westyorks:
edges:
- q: -1
r: 0
e: 6
- q: -1
r: 0
e: 1
- q: 0
r: 0
e: 6
- q: 0
r: 0
e: 1
- q: 0
r: 0
e: 2
- q: 0
r: -1
e: 1
- q: 0
r: -1
e: 4
- q: -1
r: -1
e: 3
data:
- '2016': 433
'2017': 450
'2018': 520
'2019': 450
'2020': 475
'2021': 475
code: E08000016
LAD21NM: Barnsley
- '2016': 475
'2017': 495
'2018': 495
'2019': 500
'2020': 500
'2021': 525
code: E08000032
LAD21NM: Bradford
- '2016': 475
'2017': 495
'2018': 495
'2019': 495
'2020': 495
'2021': 500
code: E08000033
LAD21NM: Calderdale
- '2016': 550
'2017': 560
'2018': 550
'2019': 575
'2020': 575
'2021': 580
code: E07000163
LAD21NM: Craven
- '2016': 700
'2017': 720
'2018': 725
'2019': 725
'2020': 745
'2021': 750
code: E07000165
LAD21NM: Harrogate
- '2016': 475
'2017': 495
'2018': 495
'2019': 500
'2020': 500
'2021': 525
code: E08000034
LAD21NM: Kirklees
- '2016': 600
'2017': 650
'2018': 671
'2019': 675
'2020': 725
'2021': 700
code: E08000035
LAD21NM: Leeds
- '2016': 550
'2017': 550
'2018': 550
'2019': 570
'2020': 595
'2021': 595
code: E07000169
LAD21NM: Selby
- '2016': 500
'2017': 520
'2018': 525
'2019': 525
'2020': 550
'2021': 550
code: E08000036
LAD21NM: Wakefield
- '2016': 700
'2017': 745
'2018': 795
'2019': 775
'2020': 750
'2021': 780
code: E06000014
LAD21NM: York
columns:
- name: filterLabel
template: '{{ LAD21NM }} ({{ code }})'
value: 2021
scale: Viridis
matchKey: code
tools:
filter:
label: filterLabel
position: top left
tooltip: >-
Median Private Sector Rents<br />{{ LAD21NM }} (2021): <strong>£{{ 2021
| toLocaleString() }}</strong>
boundaries:
county:
stroke: white
stroke-width: 3
stroke-dasharray: 10 8
stroke-linecap: round
westyorks: county
attribution: >
Data: <a
href="https://www.westyorks-ca.gov.uk/media/8790/lcr-housing-delivery-monitoring-report-2020-21-4.pdf">West
Yorkshire Combined Authority</a>
{
"hexjson": {
"layout": "odd-r",
"hexes": {
"E08000016": {
"n": "Barnsley",
"colour": "#E6007C",
"q": 0,
"r": -2
},
"E08000032": {
"n": "Bradford",
"colour": "#FF6700",
"q": -1,
"r": 0
},
"E08000033": {
"n": "Calderdale",
"colour": "#0DBC37",
"q": -2,
"r": -1
},
"E07000163": {
"n": "Craven",
"colour": "#178CFF",
"q": -2,
"r": 1
},
"E07000165": {
"n": "Harrogate",
"colour": "#2f529f",
"q": -1,
"r": 1
},
"E08000034": {
"n": "Kirklees",
"colour": "#722EA5",
"q": -1,
"r": -1
},
"E08000035": {
"n": "Leeds",
"colour": "#F9BC26",
"q": 0,
"r": 0
},
"E07000169": {
"n": "Selby",
"colour": "#1DD3A7",
"q": 1,
"r": 0
},
"E08000036": {
"n": "Wakefield",
"colour": "#EF3AAB",
"q": 0,
"r": -1
},
"E06000014": {
"n": "York",
"colour": "#F92626",
"q": 0,
"r": 1
}
},
"boundaries": {
"westyorks": {
"edges": [{
"q": -1,
"r": 0,
"e": 6
},{
"q": -1,
"r": 0,
"e": 1
},{
"q": 0,
"r": 0,
"e": 6
},{
"q": 0,
"r": 0,
"e": 1
},{
"q": 0,
"r": 0,
"e": 2
},{
"q": 0,
"r": -1,
"e": 1
},{
"q": 0,
"r": -1,
"e": 4
},{
"q": -1,
"r": -1,
"e": 3
}]
}
}
},
"data": [{
"2016": 433,
"2017": 450,
"2018": 520,
"2019": 450,
"2020": 475,
"2021": 475,
"code": "E08000016",
"LAD21NM": "Barnsley"
},{
"2016": 475,
"2017": 495,
"2018": 495,
"2019": 500,
"2020": 500,
"2021": 525,
"code": "E08000032",
"LAD21NM": "Bradford"
},{
"2016": 475,
"2017": 495,
"2018": 495,
"2019": 495,
"2020": 495,
"2021": 500,
"code": "E08000033",
"LAD21NM": "Calderdale"
},{
"2016": 550,
"2017": 560,
"2018": 550,
"2019": 575,
"2020": 575,
"2021": 580,
"code": "E07000163",
"LAD21NM": "Craven"
},{
"2016": 700,
"2017": 720,
"2018": 725,
"2019": 725,
"2020": 745,
"2021": 750,
"code": "E07000165",
"LAD21NM": "Harrogate"
},{
"2016": 475,
"2017": 495,
"2018": 495,
"2019": 500,
"2020": 500,
"2021": 525,
"code": "E08000034",
"LAD21NM": "Kirklees"
},{
"2016": 600,
"2017": 650,
"2018": 671,
"2019": 675,
"2020": 725,
"2021": 700,
"code": "E08000035",
"LAD21NM": "Leeds"
},{
"2016": 550,
"2017": 550,
"2018": 550,
"2019": 570,
"2020": 595,
"2021": 595,
"code": "E07000169",
"LAD21NM": "Selby"
},{
"2016": 500,
"2017": 520,
"2018": 525,
"2019": 525,
"2020": 550,
"2021": 550,
"code": "E08000036",
"LAD21NM": "Wakefield"
},{
"2016": 700,
"2017": 745,
"2018": 795,
"2019": 775,
"2020": 750,
"2021": 780,
"code": "E06000014",
"LAD21NM": "York"
}],
"columns": [{
"name": "filterLabel",
"template": "{{ LAD21NM }} ({{ code }})"
}],
"value": 2021,
"scale": "Viridis",
"matchKey": "code",
"tools": {
"filter": {
"label": "filterLabel",
"position": "top left"
}
},
"tooltip": "Median Private Sector Rents<br />{{ LAD21NM }} (2021): <strong>£{{ 2021 | toLocaleString() }}</strong>",
"boundaries": {
"county": {
"stroke": "white",
"stroke-width": 3,
"stroke-dasharray": "10 8",
"stroke-linecap": "round"
},
"westyorks": "county"
},
"attribution": "Data: <a href=\"https://www.westyorks-ca.gov.uk/media/8790/lcr-housing-delivery-monitoring-report-2020-21-4.pdf\">West Yorkshire Combined Authority</a>\n"
}
14. Big example§
This is a large map showing local authorities coloured by region with a layout loaded from an external source. We provide a key with a title and an entry for each region. Each individual hex label
is explicitly set to be an empty string.
This example was made with config
:
label: ''
attribution: |
Credit: Open Innovations
columns:
- name: filterLabel
template: '{{ n }} ({{ RGNNM }})'
tooltip: '{{ n }}<br />{{ _id }}'
legend:
title: Key
position: top
items:
- value: '#FF6700'
label: East Anglia
- value: '#00B6FF'
label: East Midlands
- value: '#D73058'
label: London
- value: '#D60303'
label: North East
- value: '#1DD3A7'
label: North West
- value: '#722EA5'
label: Northern Ireland
- value: '#2254F4'
label: Scotland
- value: '#67E767'
label: South East
- value: '#178CFF'
label: South West
- value: '#F9BC26'
label: Yorkshire and the Humber
- value: '#0DBC37'
label: Wales
- value: '#E6007C'
label: West Midlands
hexjson: hexjson.localauthorities
value: colour
tools:
filter:
label: filterLabel
position: top left
boundaries:
country:
stroke: white
stroke-width: 3
stroke-dasharray: 7 5.65
stroke-linecap: round
min: 0
max: 1
{
"label": "",
"attribution": "Credit: Open Innovations\n",
"columns": [{
"name": "filterLabel",
"template": "{{ n }} ({{ RGNNM }})"
}],
"tooltip": "{{ n }}<br />{{ _id }}",
"legend": {
"title": "Key",
"position": "top",
"items": [{
"value": "#FF6700",
"label": "East Anglia"
},{
"value": "#00B6FF",
"label": "East Midlands"
},{
"value": "#D73058",
"label": "London"
},{
"value": "#D60303",
"label": "North East"
},{
"value": "#1DD3A7",
"label": "North West"
},{
"value": "#722EA5",
"label": "Northern Ireland"
},{
"value": "#2254F4",
"label": "Scotland"
},{
"value": "#67E767",
"label": "South East"
},{
"value": "#178CFF",
"label": "South West"
},{
"value": "#F9BC26",
"label": "Yorkshire and the Humber"
},{
"value": "#0DBC37",
"label": "Wales"
},{
"value": "#E6007C",
"label": "West Midlands"
}]
},
"hexjson": "hexjson.localauthorities",
"value": "colour",
"tools": {
"filter": {
"label": "filterLabel",
"position": "top left"
}
},
"boundaries": {
"country": {
"stroke": "white",
"stroke-width": 3,
"stroke-dasharray": "7 5.65",
"stroke-linecap": "round"
}
},
"min": 0,
"max": 1
}