Created
March 22, 2024 06:50
-
-
Save PBI-DataVizzle/0fe863433168434d8151eb719f4d6e95 to your computer and use it in GitHub Desktop.
full_ibcs_andrzej
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": "IBCS based three-tier chart to show: 1) absolute values, 2) absolute variances, 3) relative variances.", | |
"usermeta": { | |
"Copyright": "Andrzej Leszkiewicz", | |
"License": "MIT Expat License (https://en.wikipedia.org/wiki/MIT_License)", | |
"Permission": "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.", | |
"Github": "https://github.com/avatorl/Deneb-Vega/", | |
"Design Style": "IBCS Multi-tier bar charts", | |
"Design Style URL": "https://www.ibcs.com/resource/multi-tier-bar-charts/" | |
}, | |
"padding": {"left": 0, "top": 0, "right": 0, "bottom": 0}, | |
"autosize": "fit", | |
"background": "#FFFFFF", | |
"signals": [ | |
{ | |
"name": "footnoteText", | |
"value": "IBCS based three-tier chart to show: 1) absolute values, 2) absolute variances, 3) relative variances. Dummy data. Author of Vega implementation: Andrzej Leszkiewicz http://powerofbi.org/." | |
}, | |
{"name": "width", "value": 1000}, | |
{"name": "height", "value": 600}, | |
{"name": "colorMain", "value": "#323232"}, | |
{ | |
"name": "colorPrev", | |
"description": "color for previous period data", | |
"value": "#c6c6c6" | |
}, | |
{"name": "colorNegative", "value": "#ff0000"}, | |
{"name": "labelsFontSize", "value": "14"}, | |
{"name": "titlesFontSize", "value": "18"}, | |
{ | |
"name": "colorPositive", | |
"description": "color option: #008e96, #8cb400", | |
"value": "#008e96" | |
}, | |
{ | |
"name": "sectionWidth", | |
"description": "width of each vertical chart (there are 3 charts)", | |
"update": "width/3" | |
}, | |
{ | |
"name": "sectionPadding", | |
"description": "padding between the sections (verical charts)", | |
"update": "width/12" | |
}, | |
{ | |
"name": "fieldName", | |
"description": "row (category) name - data field name", | |
"value": "Name" | |
}, | |
{ | |
"name": "fieldValue", | |
"description": "value - data field name", | |
"value": "AC" | |
}, | |
{ | |
"name": "fieldValuePrev", | |
"description": "previous period value - data field name", | |
"value": "PY" | |
}, | |
{ | |
"name": "fieldAbsVar", | |
"description": "absolute variance - data field name", | |
"value": "DeltaPY" | |
}, | |
{ | |
"name": "fieldRelVar", | |
"description": "relative variance - data field name", | |
"value": "DeltaPYP" | |
}, | |
{"name": "averageRowLabel", "value": "Ø sales rep"}, | |
{ | |
"name": "sortFieldPrevious", | |
"description": "previous sort field", | |
"init": "fieldValue", | |
"on": [ | |
{ | |
"events": "@axisNameTitle:click,@axisValueTitle:click,@axisValuePrevTitle:click,@axisDeltaTitle:click,@axisDeltaPTitle:click", | |
"update": "sortField", | |
"force": true | |
} | |
] | |
}, | |
{ | |
"name": "sortField", | |
"description": "current sort field (click on an axis name changes the signal to the corresponding data field name)", | |
"init": "fieldValue", | |
"on": [ | |
{ | |
"events": "@axisNameTitle:click", | |
"update": "fieldName", | |
"force": true | |
}, | |
{ | |
"events": "@axisValueTitle:click", | |
"update": "fieldValue", | |
"force": true | |
}, | |
{ | |
"events": "@axisValuePrevTitle:click", | |
"update": "fieldValuePrev", | |
"force": true | |
}, | |
{ | |
"events": "@axisDeltaTitle:click", | |
"update": "fieldAbsVar", | |
"force": true | |
}, | |
{ | |
"events": "@axisDeltaPTitle:click", | |
"update": "fieldRelVar", | |
"force": true | |
} | |
] | |
}, | |
{ | |
"name": "sortOrderIndex", | |
"description": "0 or 1 (if sortField==sortFieldPrevious, then click on an axis name changes the signal from 0 to 1 or from 1 to 0)", | |
"value": 1, | |
"on": [ | |
{ | |
"events": "@axisNameTitle:click", | |
"update": "sortField==fieldName&&sortFieldPrevious==sortField?1-sortOrderIndex:sortOrderIndex", | |
"force": true | |
}, | |
{ | |
"events": "@axisValueTitle:click", | |
"update": "sortField==fieldValue&&sortFieldPrevious==sortField?1-sortOrderIndex:sortOrderIndex", | |
"force": true | |
}, | |
{ | |
"events": "@axisValuePrevTitle:click", | |
"update": "sortField==fieldValuePrev&&sortFieldPrevious==sortField?1-sortOrderIndex:sortOrderIndex", | |
"force": true | |
}, | |
{ | |
"events": "@axisDeltaTitle:click", | |
"update": "sortField==fieldAbsVar&&sortFieldPrevious==sortField?1-sortOrderIndex:sortOrderIndex", | |
"force": true | |
}, | |
{ | |
"events": "@axisDeltaPTitle:click", | |
"update": "sortField==fieldRelVar&&sortFieldPrevious==sortField?1-sortOrderIndex:sortOrderIndex", | |
"force": true | |
} | |
] | |
}, | |
{ | |
"name": "sortOrder", | |
"description": "convert 0 to 'ascending', 1 to 'descending'", | |
"update": "sortOrderIndex==0?'ascending':'descending'" | |
}, | |
{"name": "arrowDown", "value": "🠧"}, | |
{"name": "arrowUp", "value": "🠥"}, | |
{ | |
"name": "titleSortName", | |
"update": "fieldName+(sortField==fieldName?(sortOrderIndex==0?arrowDown:arrowUp):'')" | |
}, | |
{ | |
"name": "titleSortValue", | |
"update": "fieldValue+(sortField==fieldValue?(sortOrderIndex==0?arrowDown:arrowUp):'')" | |
}, | |
{ | |
"name": "titleSortValuePrev", | |
"update": "fieldValuePrev+(sortField==fieldValuePrev?(sortOrderIndex==0?arrowDown:arrowUp):'')" | |
}, | |
{ | |
"name": "titleSortDelta", | |
"update": "'Δ'+fieldValuePrev+(sortField==fieldAbsVar?(sortOrderIndex==0?arrowDown:arrowUp):'')" | |
}, | |
{ | |
"name": "titleSortDeltaP", | |
"update": "'Δ'+fieldValuePrev+'%'+(sortField==fieldRelVar?(sortOrderIndex==0?arrowDown:arrowUp):'')" | |
}, | |
{ | |
"name": "highlight", | |
"description": "name of the row (category) under cursor (to highlight)", | |
"value": null, | |
"on": [ | |
{"events": "rect:mouseover", "update": "datum.Name"}, | |
{ | |
"events": "@text-value:mouseover, @text-abs-var:mouseover,@text-rel-var:mouseover", | |
"update": "datum.datum.Name" | |
}, | |
{"events": "@axisNameLabels:mouseover", "update": "datum.label"}, | |
{ | |
"events": "rect:mouseout, @text-value:mouseout,@text-abs-var:mouseout,@text-rel-var:mouseout, @axisNameLabels:mouseout", | |
"update": "null" | |
} | |
] | |
} | |
], | |
"data": [ | |
{ | |
"name": "data-csv", | |
"url": "https://dl.dropboxusercontent.com/s/xyycv8vd808ye6i/IBCF%20template%2004E.csv", | |
"format": {"type": "csv", "parse": "auto", "delimiter": ","}, | |
"transform": [ | |
{"type": "formula", "as": "order", "expr": "datum[sortField]"} | |
] | |
}, | |
{ | |
"name": "data-blank", | |
"values": [1], | |
"transform": [ | |
{ | |
"type": "formula", | |
"as": {"signal": "'order'"}, | |
"expr": "(sortOrderIndex==0?1:-1)*999999999999998" | |
}, | |
{"type": "formula", "as": {"signal": "fieldName"}, "expr": "null"}, | |
{"type": "formula", "as": {"signal": "fieldValue"}, "expr": "null"} | |
] | |
}, | |
{ | |
"name": "data-average", | |
"source": "data-csv", | |
"transform": [ | |
{ | |
"type": "aggregate", | |
"fields": [{"signal": "fieldValue"}, {"signal": "fieldValuePrev"}], | |
"ops": ["average", "average"], | |
"as": [{"signal": "fieldValue"}, {"signal": "fieldValuePrev"}] | |
}, | |
{ | |
"type": "formula", | |
"as": {"signal": "fieldValue"}, | |
"expr": "ceil(datum[fieldValue])" | |
}, | |
{ | |
"type": "formula", | |
"as": {"signal": "fieldValuePrev"}, | |
"expr": "ceil(datum[fieldValuePrev])" | |
}, | |
{ | |
"type": "formula", | |
"as": {"signal": "fieldName"}, | |
"expr": "averageRowLabel" | |
}, | |
{ | |
"type": "formula", | |
"as": {"signal": "'order'"}, | |
"expr": "(sortOrderIndex==0?1:-1)*999999999999999" | |
}, | |
{ | |
"type": "formula", | |
"as": {"signal": "fieldAbsVar"}, | |
"expr": "datum[fieldValue]-datum[fieldValuePrev]" | |
}, | |
{ | |
"type": "formula", | |
"as": {"signal": "fieldRelVar"}, | |
"expr": "ceil((datum[fieldValue]-datum[fieldValuePrev])/datum[fieldValuePrev]*100)" | |
} | |
] | |
}, | |
{ | |
"name": "data", | |
"source": ["data-csv", "data-blank", "data-average"], | |
"transform": [ | |
{ | |
"type": "extent", | |
"field": {"signal": "fieldValue"}, | |
"signal": "extentValue" | |
}, | |
{ | |
"type": "extent", | |
"field": {"signal": "fieldValuePrev"}, | |
"signal": "extentValuePrev" | |
}, | |
{ | |
"type": "extent", | |
"field": {"signal": "fieldAbsVar"}, | |
"signal": "extentAbsVar" | |
} | |
] | |
} | |
], | |
"scales": [ | |
{ | |
"name": "scaleY", | |
"type": "band", | |
"domain": { | |
"data": "data", | |
"field": "Name", | |
"sort": { | |
"field": "order", | |
"order": {"signal": "sortOrder"}, | |
"op": "max" | |
} | |
}, | |
"range": "height", | |
"padding": 0.1 | |
}, | |
{ | |
"name": "scaleXValue", | |
"type": "linear", | |
"domain": [0, {"signal": "max(extentValue[1],extentValuePrev[1])"}], | |
"range": [{"signal": "0"}, {"signal": "sectionWidth"}], | |
"nice": true | |
}, | |
{ | |
"name": "scaleXDelta", | |
"type": "linear", | |
"domain": [{"signal": "extentAbsVar[0]"}, {"signal": "extentAbsVar[1]"}], | |
"range": [ | |
{"signal": "sectionWidth+sectionPadding"}, | |
{ | |
"signal": "sectionWidth+sectionPadding+sectionWidth/max(extentValue[1],extentValuePrev[1])*(extentAbsVar[1]-extentAbsVar[0])" | |
} | |
], | |
"nice": true | |
}, | |
{ | |
"name": "scaleXDeltaP", | |
"type": "linear", | |
"domain": {"data": "data", "field": {"signal": "fieldRelVar"}}, | |
"range": [ | |
{ | |
"signal": "sectionWidth+sectionPadding+sectionWidth/max(extentValue[1],extentValuePrev[1])*(extentAbsVar[1]-extentAbsVar[0])" | |
}, | |
{ | |
"signal": "width-sectionWidth+sectionPadding+sectionWidth/max(extentValue[1],extentValuePrev[1])*(extentAbsVar[1]-extentAbsVar[0])" | |
} | |
], | |
"nice": true | |
} | |
], | |
"axes": [ | |
{ | |
"scale": "scaleY", | |
"orient": "left", | |
"zindex": 1, | |
"domain": true, | |
"ticks": false, | |
"offset": 0, | |
"labelPadding": 5, | |
"labelFont": "Segoe UI", | |
"labelFontSize": {"signal": "labelsFontSize"}, | |
"labelFontWeight": {"signal": "'normal'"}, | |
"title": {"signal": "titleSortName"}, | |
"titleAnchor": "start", | |
"titleAngle": 0, | |
"titleAlign": "right", | |
"titleX": -15, | |
"titleY": -4, | |
"titleColor": {"signal": "colorMain"}, | |
"titleFont": "Segoe UI", | |
"titleFontSize": {"signal": "titlesFontSize"}, | |
"titleFontWeight": "normal", | |
"encode": { | |
"axis": {"update": {"zindex": {"value": 0}}}, | |
"labels": { | |
"interactive": true, | |
"name": "axisNameLabels", | |
"update": { | |
"text": { | |
"signal": "(datum.label==highlight?'':'')+(datum.value!=null?datum.label:'')" | |
}, | |
"fontWeight": { | |
"signal": "datum.label==averageRowLabel?'bold':'normal'" | |
} | |
} | |
}, | |
"title": { | |
"interactive": true, | |
"name": "axisNameTitle", | |
"update": {"cursor": {"value": "pointer"}} | |
} | |
} | |
}, | |
{ | |
"scale": "scaleXValue", | |
"orient": "top", | |
"title": {"signal": "titleSortValue"}, | |
"titleColor": {"signal": "colorMain"}, | |
"titleFont": "Segoe UI", | |
"titleFontSize": {"signal": "titlesFontSize"}, | |
"titleFontWeight": "normal", | |
"titleX": {"signal": "sectionWidth/4"}, | |
"domain": false, | |
"ticks": false, | |
"labels": false, | |
"encode": { | |
"title": { | |
"interactive": true, | |
"name": "axisValueTitle", | |
"update": {"cursor": {"value": "pointer"}} | |
} | |
} | |
}, | |
{ | |
"scale": "scaleXValue", | |
"orient": "top", | |
"title": {"signal": "titleSortValuePrev"}, | |
"titleColor": {"signal": "colorPrev"}, | |
"titleFont": "Segoe UI", | |
"titleFontSize": {"signal": "titlesFontSize"}, | |
"titleFontWeight": "normal", | |
"titleX": {"signal": "sectionWidth*3/4"}, | |
"domain": false, | |
"ticks": false, | |
"labels": false, | |
"encode": { | |
"title": { | |
"interactive": true, | |
"name": "axisValuePrevTitle", | |
"update": {"cursor": {"value": "pointer"}} | |
} | |
} | |
}, | |
{ | |
"scale": "scaleXDelta", | |
"orient": "top", | |
"titleColor": {"signal": "colorMain"}, | |
"title": {"signal": "titleSortDelta"}, | |
"titleFont": "Segoe UI", | |
"titleFontSize": {"signal": "titlesFontSize"}, | |
"titleFontWeight": "normal", | |
"domain": false, | |
"ticks": false, | |
"labels": false, | |
"encode": { | |
"title": { | |
"interactive": true, | |
"name": "axisDeltaTitle", | |
"update": {"cursor": {"value": "pointer"}} | |
} | |
} | |
}, | |
{ | |
"scale": "scaleXDeltaP", | |
"orient": "top", | |
"title": {"signal": "titleSortDeltaP"}, | |
"titleColor": {"signal": "colorMain"}, | |
"titleFont": "Segoe UI", | |
"titleFontSize": {"signal": "titlesFontSize"}, | |
"titleFontWeight": "normal", | |
"domain": false, | |
"ticks": false, | |
"labels": false, | |
"encode": { | |
"title": { | |
"interactive": true, | |
"name": "axisDeltaPTitle", | |
"update": {"cursor": {"value": "pointer"}} | |
} | |
} | |
} | |
], | |
"marks": [ | |
{ | |
"name": "rect-value", | |
"type": "rect", | |
"from": {"data": "data"}, | |
"zindex": 2, | |
"encode": { | |
"update": { | |
"x": {"scale": "scaleXValue", "value": 0}, | |
"x2": {"scale": "scaleXValue", "field": {"signal": "fieldValue"}}, | |
"y": { | |
"scale": "scaleY", | |
"field": {"signal": "fieldName"}, | |
"band": 0.25 | |
}, | |
"height": {"scale": "scaleY", "band": 0.665}, | |
"fill": {"signal": "colorMain"}, | |
"tooltip": { | |
"signal": "fieldValue+': '+datum[fieldValue]+', '+fieldValuePrev+': '+datum[fieldValuePrev]" | |
} | |
} | |
} | |
}, | |
{ | |
"name": "text-value", | |
"type": "text", | |
"from": {"data": "rect-value"}, | |
"zindex": 3, | |
"encode": { | |
"update": { | |
"text": { | |
"signal": "datum.datum[fieldValue]==null?'':format(datum.datum[fieldValue],'d')" | |
}, | |
"x": {"field": "x2", "offset": 5}, | |
"y": {"field": "y", "offset": {"field": "height", "mult": 0.75}}, | |
"font": {"signal": "'Segoe UI'"}, | |
"fontSize": {"signal": "labelsFontSize"}, | |
"fill": {"signal": "colorMain"}, | |
"fontWeight": { | |
"signal": "datum.datum[fieldName]==averageRowLabel?'bold':'normal'" | |
}, | |
"tooltip": { | |
"signal": "fieldValue+': '+datum.datum[fieldValue]+', '+fieldValuePrev+': '+datum.datum[fieldValuePrev]" | |
} | |
} | |
} | |
}, | |
{ | |
"name": "rect-value-prev", | |
"type": "rect", | |
"from": {"data": "data"}, | |
"zindex": 1, | |
"encode": { | |
"update": { | |
"x": {"scale": "scaleXValue", "value": 0}, | |
"x2": {"scale": "scaleXValue", "field": {"signal": "fieldValuePrev"}}, | |
"y": {"scale": "scaleY", "field": {"signal": "fieldName"}, "band": 0}, | |
"height": {"scale": "scaleY", "band": 0.665}, | |
"fill": {"signal": "colorPrev"}, | |
"tooltip": { | |
"signal": "fieldValue+': '+datum[fieldValue]+', '+fieldValuePrev+': '+datum[fieldValuePrev]" | |
} | |
} | |
} | |
}, | |
{ | |
"name": "rect-abs-var", | |
"type": "rect", | |
"from": {"data": "data"}, | |
"zindex": 1, | |
"encode": { | |
"update": { | |
"x": {"scale": "scaleXDelta", "value": 0}, | |
"x2": {"scale": "scaleXDelta", "field": {"signal": "fieldAbsVar"}}, | |
"y": {"scale": "scaleY", "field": "Name", "band": 0.17}, | |
"height": {"scale": "scaleY", "band": 0.665}, | |
"fill": { | |
"signal": "datum[fieldAbsVar]<0?colorNegative:colorPositive" | |
}, | |
"cornerRadius": {"signal": "1"}, | |
"tooltip": {"signal": "'Δ'+fieldValuePrev+': '+datum[fieldAbsVar]"} | |
} | |
} | |
}, | |
{ | |
"name": "text-abs-var", | |
"type": "text", | |
"from": {"data": "rect-abs-var"}, | |
"zindex": 2, | |
"encode": { | |
"update": { | |
"text": { | |
"signal": "datum.datum[fieldValue]==null?'':format(datum.datum[fieldAbsVar],'+d')" | |
}, | |
"x": {"signal": "datum.datum[fieldAbsVar]<0?datum.x-5:datum.x2+5"}, | |
"y": {"field": "y", "offset": {"field": "height", "mult": 0.7}}, | |
"align": {"signal": "datum.datum[fieldAbsVar]<0?'right':'left'"}, | |
"font": {"signal": "'Segoe UI'"}, | |
"fontSize": {"signal": "labelsFontSize"}, | |
"fontWeight": { | |
"signal": "datum.datum[fieldName]==averageRowLabel?'bold':'normal'" | |
}, | |
"fill": {"signal": "colorMain"}, | |
"tooltip": { | |
"signal": "'Δ'+fieldValuePrev+': '+datum.datum[fieldAbsVar]" | |
} | |
} | |
} | |
}, | |
{ | |
"name": "rect-rel-var-end", | |
"type": "rect", | |
"from": {"data": "data"}, | |
"zindex": 1, | |
"encode": { | |
"update": { | |
"x": { | |
"scale": "scaleXDeltaP", | |
"field": {"signal": "fieldRelVar"}, | |
"offset": 5 | |
}, | |
"x2": { | |
"scale": "scaleXDeltaP", | |
"field": {"signal": "fieldRelVar"}, | |
"offset": -5 | |
}, | |
"y": {"scale": "scaleY", "field": "Name", "band": 0.3}, | |
"height": {"scale": "scaleY", "band": 0.4}, | |
"fill": {"signal": "colorMain"}, | |
"cornerRadius": {"signal": "1"}, | |
"tooltip": {"signal": "'Δ'+fieldValuePrev+'%: '+datum[fieldRelVar]"} | |
} | |
} | |
}, | |
{ | |
"name": "rect-rel-var", | |
"type": "rect", | |
"from": {"data": "data"}, | |
"zindex": 1, | |
"encode": { | |
"update": { | |
"x": {"scale": "scaleXDeltaP", "value": 0}, | |
"x2": {"scale": "scaleXDeltaP", "field": {"signal": "fieldRelVar"}}, | |
"y": {"scale": "scaleY", "field": "Name", "band": 0.45}, | |
"height": {"scale": "scaleY", "band": 0.1}, | |
"fill": { | |
"signal": "datum[fieldRelVar]<0?colorNegative:colorPositive" | |
}, | |
"tooltip": {"signal": "'Δ'+fieldValuePrev+'%: '+datum[fieldRelVar]"} | |
} | |
} | |
}, | |
{ | |
"name": "text-rel-var", | |
"type": "text", | |
"from": {"data": "rect-rel-var"}, | |
"zindex": 2, | |
"encode": { | |
"update": { | |
"text": { | |
"signal": "datum.datum[fieldValue]==null?'':format(datum.datum[fieldRelVar],'+d')" | |
}, | |
"x": { | |
"signal": "datum.datum[fieldRelVar]<0?(datum.x-10):(datum.x2+10)" | |
}, | |
"y": {"field": "y", "offset": {"field": "height", "mult": 2}}, | |
"align": {"signal": "datum.datum[fieldRelVar]<0?'right':'left'"}, | |
"font": {"signal": "'Segoe UI'"}, | |
"fontSize": {"signal": "labelsFontSize"}, | |
"fontWeight": { | |
"signal": "datum.datum[fieldName]==averageRowLabel?'bold':'normal'" | |
}, | |
"tooltip": { | |
"signal": "'Δ'+fieldValuePrev+'%: '+datum.datum[fieldRelVar]" | |
} | |
} | |
} | |
}, | |
{ | |
"name": "rule-highlight-row", | |
"zindex": 0, | |
"type": "rule", | |
"encode": { | |
"enter": { | |
"stroke": {"signal": "'yellow'"}, | |
"strokeOpacity": {"signal": "0.3"}, | |
"strokeWidth": {"scale": "scaleY", "band": 1} | |
}, | |
"update": { | |
"x": {"signal": "highlight==null?0:-120"}, | |
"x2": {"signal": "highlight==null?0:width+160"}, | |
"y": {"scale": "scaleY", "signal": "highlight", "band": 0.44} | |
} | |
} | |
}, | |
{ | |
"name": "rule-abs-var-axis", | |
"type": "rule", | |
"zindex": 0, | |
"encode": { | |
"enter": { | |
"x": {"scale": "scaleXDelta", "value": 0}, | |
"y": {"signal": "0"}, | |
"y2": {"signal": "height"}, | |
"stroke": {"signal": "colorPrev"}, | |
"strokeWidth": {"signal": "2"} | |
} | |
} | |
}, | |
{ | |
"name": "rule-rel-var-axis", | |
"type": "rule", | |
"zindex": 0, | |
"encode": { | |
"enter": { | |
"x": {"scale": "scaleXDeltaP", "value": 0}, | |
"y": {"signal": "0"}, | |
"y2": {"signal": "height"}, | |
"stroke": {"signal": "colorPrev"}, | |
"strokeWidth": {"signal": "2"} | |
} | |
} | |
}, | |
{ | |
"name": "rule-average-line", | |
"type": "rule", | |
"from": {"data": "data-average"}, | |
"zindex": 0, | |
"encode": { | |
"enter": { | |
"x": {"scale": "scaleXValue", "signal": "datum[fieldValue]"}, | |
"y": {"signal": "0"}, | |
"y2": {"signal": "height+5"}, | |
"stroke": {"signal": "colorMain"}, | |
"strokeWidth": {"signal": "0.5"} | |
} | |
} | |
}, | |
{ | |
"name": "symbol-average-arrow", | |
"type": "symbol", | |
"from": {"data": "data-average"}, | |
"zindex": 0, | |
"encode": { | |
"enter": { | |
"shape": {"value": "triangle-up"}, | |
"x": {"scale": "scaleXValue", "signal": "datum[fieldValue]"}, | |
"y": {"signal": "height+5"}, | |
"fill": {"signal": "colorMain"}, | |
"stroke": {"signal": "colorMain"}, | |
"strokeWidth": {"signal": "0.5"} | |
} | |
} | |
}, | |
{ | |
"name": "text-average-arrow", | |
"type": "text", | |
"from": {"data": "symbol-average-arrow"}, | |
"zindex": 2, | |
"encode": { | |
"enter": { | |
"text": {"signal": "'ØAC'"}, | |
"x": {"signal": "datum.x"}, | |
"y": {"signal": "datum.y+17"}, | |
"align": {"signal": "'center'"}, | |
"font": {"signal": "'Segoe UI'"}, | |
"fontSize": {"signal": "labelsFontSize"}, | |
"fontWeight": {"signal": "'bold'"}, | |
"fill": {"signal": "colorMain"}, | |
"tooltip": { | |
"signal": "'Δ'+fieldValuePrev+': '+datum.datum[fieldAbsVar]" | |
} | |
} | |
} | |
}, | |
{ | |
"name": "rule-avg-section-divider", | |
"type": "rule", | |
"zindex": 1, | |
"encode": { | |
"enter": { | |
"x": {"signal": "-155"}, | |
"x2": {"signal": "width"}, | |
"y": {"scale": "scaleY", "signal": "null", "band": 0.44}, | |
"opacity": {"signal": "1"}, | |
"stroke": {"signal": "'#EFEFEF'"}, | |
"strokeWidth": {"scale": "scaleY", "band": 0.4} | |
} | |
} | |
}, | |
{ | |
"name": "rule-footnote-divider", | |
"type": "rule", | |
"zindex": 1, | |
"encode": { | |
"enter": { | |
"x": {"signal": "-155"}, | |
"x2": {"signal": "width"}, | |
"y": {"signal": "height+35"}, | |
"opacity": {"signal": "1"}, | |
"stroke": {"signal": "colorMain"}, | |
"strokeWidth": {"signal": "0.3"} | |
} | |
} | |
}, | |
{ | |
"name": "text-footnote", | |
"type": "text", | |
"zindex": 3, | |
"encode": { | |
"enter": { | |
"text": {"signal": "footnoteText"}, | |
"x": {"signal": "-155"}, | |
"y": {"signal": "height+50"}, | |
"fill": {"signal": "colorMain"}, | |
"opacity": {"signal": "0.5"}, | |
"font": {"signal": "'Segoe UI'"}, | |
"fontSize": {"signal": "labelsFontSize"} | |
} | |
} | |
} | |
], | |
"config": {} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment