Vega-lite:跳过无效值,而不是将总和视为 0

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

当对列进行聚合并使用 Vega-Lite 绘制图表时,是否可以在进行加法时跳过无效值而不是将它们视为 0?当存在丢失/无效数据时,我想将其显示为原样,而不是显示为 0。

例如,这个graph是我在聚合

date
时所期望的,以获得
x
y
的总和。 enter image description here

在这个示例中,

y
两行的
date=2022-01-20
值都是NaN,所以我希望
y
列的总和没有数据点并将其显示为缺失数据,而不是为 0。 enter image description here

有办法做到这一点吗?我已经查看了文档,但可能遗漏了一些内容。我尝试过使用过滤器像这样,但是它会过滤掉整行,而不仅仅是在求和时过滤掉该行的特定列的无效值。

我正在考虑类似 pandas GroupBy.sum(min_coun=1) 的东西,这样如果没有至少 1 个非 NaN 值,那么结果将显示为 NaN。

json charts visualization vega-lite vega
1个回答
1
投票

好的,试试这个,删除 NaN 和 null 但留下零。

编辑。

或者这可以消除大量无用的转换。

编辑器

    {
      "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
      "description": "Google's stock price over time.",
      "data": {
        "values": [
          {"date": "2022-01-20", "g": "apples", "x": "NaN", "y": "NaN"},
          {"date": "2022-01-20", "g": "oranges", "x": "10", "y": "20"},
          {"date": "2022-01-21", "g": "oranges", "x": "30", "y": "NaN"},
          {"date": "2022-01-21", "g": "grapes", "x": "40", "y": "20"},
          {"date": "2022-01-22", "g": "apples", "x": "NaN", "y": "NaN"},
          {"date": "2022-01-22", "g": "grapes", "x": "10", "y": "NaN"}
        ]
      },
      "transform": [
        {"calculate": "parseFloat(datum['x'])", "as": "x"},
        {"calculate": "parseFloat(datum['y'])", "as": "y"},
        {"fold": ["x", "y"]},
        **{"filter": {"field": "value", "valid": true}},**
        {
          "aggregate": [{"op": "sum", "field": "value", "as": "value"}],
          "groupby": ["date", "key"]
        }
      ],
      "encoding": {"x": {"field": "date", "type": "temporal"}},
      "layer": [
        {
          "encoding": {
            "y": {"field": "value", "type": "quantitative"},
            "color": {"field": "key", "type": "nominal"}
          },
          "mark": "line"
        },
        {
          "encoding": {
            "y": {"field": "value", "type": "quantitative"},
            "color": {"field": "key", "type": "nominal"}
          },
          "mark": {"type": "point", "tooltip": {"content": "encoding"}}
        }
      ]
    }
© www.soinside.com 2019 - 2024. All rights reserved.