编辑:第三次部分成功尝试 - 再次接近,但需要使用辅助措施来显示高点和低点 - 理想情况下希望在没有额外 DAX 措施的情况下实现相同的结果
编辑:第一次失败的尝试:
我再次陷入了 Vega-lite 的困境,尝试使用过滤器和颜色属性对线端圆标记和文本标签的点进行分层,并且还对最高/最低点标记进行分层:
我已经快到了,但我错过了一些基本的东西,因为我无法正确编码标记 -
非常感谢任何帮助。 - PBIX 在这里可用:Temperature_DEV_argmax_PAGE2
{
"data": {"name": "dataset"},
"encoding": {
"x": {
"field": "DayOfYear",
"type": "temporal"
},
"y": {
"field": "_temp",
"type": "quantitative",
"scale": {"zero": false}
},
"color": {
"field": "Year",
"type": "nominal"
}
},
"layer": [
{
"transform": [
{
"filter": {
"field": "Year",
"oneOf": [
"2023",
"2022",
"2021",
"1979-2000 mean"
]
}
}
],
"layer": [
{
"mark": {"type": "line"},
"encoding": {
"x": {
"field": "DayOfYear",
"type": "temporal"
},
"y": {
"field": "_temp",
"type": "quantitative",
"scale": {"zero": false}
},
"color": {
"field": "Year",
"type": "nominal"
}
}
},
{
"description": "COLOR_LINES_BLUE_RED",
"layer": [
{
"mark": {"type": "line"},
"encoding": {
"x": {
"field": "DayOfYear",
"type": "temporal"
},
"y": {
"field": "_temp",
"type": "quantitative",
"scale": {
"zero": false
}
},
"color": {
"field": "Year",
"type": "nominal",
"scale": {
"domain": [
"2023",
"2022",
"2021",
"1979-2000 mean"
],
"range": [
"crimson",
"#000FFF50",
"#000FFF80",
"orange"
]
}
}
}
}
]
},
{
"transform": [
{
"filter": "datum['_temp'] == datum['_highpoints'] || datum['_temp'] == datum['_lowpoints']"
}
],
"mark": {
"type": "point",
"filled": true,
"stroke": "black",
"strokeWidth": 0.8,
"shape": {
"expr": "datum['_temp'] == datum['_highpoints'] ? 'triangle-down' : 'triangle-up'"
},
"size": 250,
"opacity": 1,
"yOffset": {
"expr": "datum['_temp'] == datum['_highpoints'] ? -10 : 10"
}
},
"encoding": {
"x": {
"field": "DayOfYear",
"type": "temporal"
},
"y": {
"field": "_temp",
"type": "quantitative",
"scale": {"zero": false}
},
"color": {
"field": "Year",
"type": "nominal"
}
}
},
{
"transform": [
{
"filter": "datum['_temp'] == datum['_highpoints'] || datum['_temp'] == datum['_lowpoints']"
}
],
"mark": {
"type": "text",
"filled": true,
"stroke": "whitesmoke",
"strokeWidth": 8,
"size": 15,
"fontWeight": "1000",
"opacity": 1,
"yOffset": {
"expr": "datum['_temp'] == datum['_highpoints'] ? -30 : 30"
}
},
"encoding": {
"x": {
"field": "DayOfYear",
"type": "temporal"
},
"y": {
"field": "_temp",
"type": "quantitative",
"scale": {"zero": false}
},
"color": {
"field": "Year",
"type": "nominal"
},
"text": {
"field": "_temp",
"format": ",.3~s"
}
}
},
{
"transform": [
{
"filter": "datum['_temp'] == datum['_highpoints'] || datum['_temp'] == datum['_lowpoints']"
}
],
"mark": {
"type": "text",
"filled": true,
"size": 15,
"fontWeight": "1000",
"opacity": 1,
"yOffset": {
"expr": "datum['_temp'] == datum['_highpoints'] ? -30 : 30"
}
},
"encoding": {
"text": {
"field": "_temp",
"format": ",.3~s"
}
}
}
]
}
]
}
试试这个:
{
"data": {"name": "dataset"},
"encoding": {
"x": {
"field": "DayOfYear",
"type": "temporal"
},
"y": {
"field": "_temp",
"type": "quantitative",
"scale": {"zero": false}
},
"color": {
"field": "Year",
"type": "nominal"
}
},
"layer": [
{
"transform": [
{
"filter": {
"field": "Year",
"oneOf": [
"2023",
"2022",
"2021",
"1979-2000 mean"
]
}
},
{
"joinaggregate": [
{
"op": "max",
"field": "_temp",
"as": "highest"
}
],
"groupby": ["Year"]
},
{
"joinaggregate": [
{
"op": "min",
"field": "_temp",
"as": "lowest"
}
],
"groupby": ["Year"]
}
],
"layer": [
{
"mark": {"type": "line"},
"encoding": {
"x": {
"field": "DayOfYear",
"type": "temporal"
},
"y": {
"field": "_temp",
"type": "quantitative",
"scale": {"zero": false}
},
"color": {
"field": "Year",
"type": "nominal",
"scale": {
"domain": [
"2023",
"2022",
"2021",
"1979-2000 mean"
],
"range": [
"crimson",
"#000FFF50",
"#000FFF80",
"orange"
]
}
}
}
},
{
"transform": [
{
"filter": "datum['_temp'] == datum['highest'] || datum['_temp'] == datum['lowest']"
}
],
"mark": {
"type": "point",
"filled": true,
"stroke": "black",
"strokeWidth": 0.8,
"shape": {
"expr": "datum['_temp'] == datum['highest'] ? 'triangle-down' : 'triangle-up'"
},
"size": 250,
"opacity": 1,
"yOffset": {
"expr": "datum['_temp'] == datum['highest'] ? -10 : 10"
}
},
"encoding": {
"x": {
"field": "DayOfYear",
"type": "temporal"
},
"y": {
"field": "_temp",
"type": "quantitative",
"scale": {"zero": false}
},
"color": {
"field": "Year",
"type": "nominal"
}
}
},
{
"transform": [
{
"filter": "datum['_temp'] == datum['highest'] || datum['_temp'] == datum['lowest']"
}
],
"mark": {
"type": "text",
"filled": true,
"stroke": "whitesmoke",
"strokeWidth": 8,
"size": 15,
"fontWeight": "1000",
"opacity": 1,
"yOffset": {
"expr": "datum['_temp'] == datum['highest'] ? -30 : 30"
}
},
"encoding": {
"x": {
"field": "DayOfYear",
"type": "temporal"
},
"y": {
"field": "_temp",
"type": "quantitative",
"scale": {"zero": false}
},
"color": {
"field": "Year",
"type": "nominal"
},
"text": {
"field": "_temp",
"format": ",.3~s"
}
}
},
{
"transform": [
{
"filter": "datum['_temp'] == datum['highest'] || datum['_temp'] == datum['lowest']"
}
],
"mark": {
"type": "text",
"filled": true,
"size": 15,
"fontWeight": "1000",
"opacity": 1,
"yOffset": {
"expr": "datum['_temp'] == datum['highest'] ? -30 : 30"
}
},
"encoding": {
"text": {
"field": "_temp",
"format": ",.3~s"
}
}
}
]
}
]
}