I tried to make two area charts using the Deneb visual of power bi and vega lite language. The two area charts present the progress of a measure through the months of 2022 and 2023.
What I want to do :
1) Display a forecast line (with dashed line) of the 2023 area chart starting from the month of "June" based on the numbers in of 2022 and the previous months of 2023 to make the forecast become more accurate.
==> For example a peak was reached in December 2022 , meaning that a peak in December 2023 would be mostly be reached too with a bigger value
2) I don't know why the months are not placed for me in odrer
Here's the PBIX file: https://drive.google.com/file/d/1P16eirLEWCdGsPq8ZS582Wi4MRaP8ppS/view?usp=sharing
Here's the code:
{
"data": {"name": "dataset"},
"transform": [
{
"calculate": "format(datum['Leaves Count 2022']/1000,'0.1f')+'k'",
"as": "l1"
},
{
"calculate": "format(datum['Leaves Count 2023']/1000,'0.1f')+'k'",
"as": "l2"
},
{
"joinaggregate": [
{
"op": "max",
"field": "Leaves Count 2022",
"as": "l1max"
},
{
"op": "max",
"field": "Leaves Count 2023",
"as": "l2max"
},
{
"op": "min",
"field": "Leaves Count 2022",
"as": "l1min"
},
{
"op": "min",
"field": "Leaves Count 2023",
"as": "l2min"
}
]
}
],
"layer": [
{
"mark": {
"type": "area",
"line": {"color": "#063970"},
"color": {
"x1": 1,
"y1": 1,
"gradient": "linear",
"stops": [
{
"offset": 0,
"color": "white"
},
{
"offset": 1,
"color": "#063970"
}
]
}
}
},
{
"mark": {
"type": "area",
"line": {"color": "#2596be"},
"color": {
"x1": 1,
"y1": 1,
"gradient": "linear",
"stops": [
{
"offset": 0,
"color": "white"
},
{
"offset": 1,
"color": "#2596be"
}
]
}
},
"encoding": {
"y": {
"field": "Leaves Count 2022",
"type": "quantitative"
}
}
},
{
"mark": {
"type": "circle",
"size": 50,
"fill": {
"expr": "datum['Leaves Count 2023'] == datum.l2max ? 'red' : datum['Leaves Count 2023'] == datum.l2min ? 'green' : '#063970'"
},
"stroke": "white",
"strokeWidth": 1
},
"encoding": {
"x": {
"field": "MONTH",
"type": "ordinal"
},
"y": {
"field": "Leaves Count 2023",
"type": "quantitative"
}
}
},
{
"mark": {
"type": "circle",
"size": 50,
"fill": {
"expr": "datum['Leaves Count 2022'] == datum.l1max ? 'red' : datum['Leaves Count 2022'] == datum.l1min ? 'green' : '#2596be'"
},
"stroke": "white",
"strokeWidth": 1
},
"encoding": {
"x": {
"field": "MONTH",
"type": "ordinal"
},
"y": {
"field": "Leaves Count 2022",
"type": "quantitative"
}
}
},
{
"mark": {
"type": "text",
"yOffset": -10,
"size": 10,
"color": {
"expr": "datum['Leaves Count 2023'] == datum.l2max ? 'red' : datum['Leaves Count 2023'] == datum.l2min ? 'green' : '#000000'"
},
"fontWeight": {
"expr": "datum['Leaves Count 2023'] == datum.l2max || datum['Leaves Count 2023'] == datum.l2min ? 'bold' : 'normal'"
}
},
"encoding": {
"text": {"field": "l2"},
"opacity": {
"condition": {
"test": {
"field": "MONTH",
"equal": "off"
},
"value": 0.1
},
"value": 1
},
"y": {
"field": "Leaves Count 2023",
"type": "quantitative",
"axis": null
}
}
},
{
"mark": {
"type": "text",
"yOffset": -10,
"size": 10,
"color": {
"expr": "datum['Leaves Count 2022'] == datum.l1max ? 'red' : datum['Leaves Count 2022'] == datum.l1min ? 'green' : '#000000'"
},
"fontWeight": {
"expr": "datum['Leaves Count 2022'] == datum.l1max || datum['Leaves Count 2022'] == datum.l1min ? 'bold' : 'normal'"
}
},
"encoding": {
"text": {"field": "l1"},
"opacity": {
"condition": {
"test": {
"field": "MONTH",
"equal": "off"
},
"value": 0.1
},
"value": 1
},
"y": {
"field": "Leaves Count 2022",
"type": "quantitative",
"axis": null
}
}
},
{
"mark": {
"type": "rule",
"stroke": "red",
"strokeDash": [3, 3]
},
"encoding": {
"x": {
"field": "MONTH",
"type": "ordinal"
},
"y": {
"field": "Leaves Count 2023",
"type": "quantitative"
}
},
"transform": [
{"filter": "datum['Leaves Count 2023'] == datum.l2max"}
]
},
{
"mark": {
"type": "rule",
"stroke": "red",
"strokeDash": [3, 3]
},
"encoding": {
"x": {
"field": "MONTH",
"type": "ordinal"
},
"y": {
"field": "Leaves Count 2022",
"type": "quantitative"
}
},
"transform": [
{"filter": "datum['Leaves Count 2022'] == datum.l1max"}
]
}
],
"encoding": {
"x": {
"field": "MONTH",
"type": "ordinal",
"axis": {"labelPadding": 0},
"title": null
},
"y": {
"field": "Leaves Count 2023",
"type": "quantitative",
"axis": null
}
}
}