ArgMax 和颜色属性:无法对线端点标记和最高/最低圆圈标记进行编码

问题描述 投票:0回答:1

编辑:第三次部分成功尝试 - 再次接近,但需要使用辅助措施来显示高点和低点 - 理想情况下希望在没有额外 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"
            }
          }
        }
      ]
    }
  ]
}
powerbi visualization powerbi-desktop vega-lite deneb
1个回答
0
投票

试试这个:

{
  "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"
            }
          }
        }
      ]
    }
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.