【问题标题】:Can I set a dynamic axis value using Vegalite?我可以使用 Vegalite 设置动态轴值吗?
【发布时间】:2023-01-26 10:15:29
【问题描述】:

我在 PowerBI 中使用 Vega-lite 来制作视觉效果。我想根据测量结果手动设置轴值(该测量存在于 PowerBI 中并添加到 Deneb 集成中)。 使用下面的代码但将字段替换为整数效果很好,但它是静态的,我需要动态确定它。 Vegalite 不支持以这种方式使用字段,还是我只是使用了不正确的语法? (下面的代码 sn-p 只是整个代码的摘录)

“编码”:{ “X”: { “领域”:“组成的领域”, “类型”:“定量”, “规模”: { “不错”:假的, “域”:[0,“动态场测量”] } } }

我也尝试过使用 {"field":"Dynamic field measures"} 但它真的不喜欢那样!任何关于正确语法的建议,甚至只是确认 vegalite 不支持此功能都会很棒,在此先感谢大家!

编辑:更多信息!

所以我的数据是这样排列的。我想为每个类别制作一个图表,但我希望所有轴都与最大值对齐,因此每个图表都使用相同的比例。我可以静态修复它,但用户将能够与过滤器交互(这个示例数据显然非常简化,真实模型附加了几个不同的维度)所以需要使用“动态场测量”来修复最大范围轴(附加上下文,该度量是在 PowerBI 中进行的并且工作正常)

如果有帮助的话,我可以模拟一些图像,但它基本上只是一组具有公共固定轴的条形图。希望这能让我的问题更清楚。

【问题讨论】:

  • 你能再澄清一下这个问题吗?理想地显示完整的样本数据集和所需的输出?
  • 当然,我在原始帖子中添加了一些示例数据 - 如果有任何需要进一步说明的地方,请告诉我
  • 您不需要动态场测量。范围将根据您的数据自动计算,轴分辨率可以根据需要共享或独立。
  • 抱歉,也许我不清楚,我希望轴以最大值结束——如果图表自动计算,那么所有轴都会不同,这是我试图避免的。
  • 话虽如此,我找到了一个解决方法(我怀疑 vegalite 不支持使用字段来指定域)所以我只打了一个刻度并将其涂成白色,并将其设置为我的动态字段所以我达到了我的效果想要,尽管不是最干净的方式,所以如果有办法让这项工作我仍然会很感激!

标签: powerbi vega-lite deneb


【解决方案1】:

我不知道你到底想做什么,但是 @David Bacci 有一个关于 setting a max value 的很好的答案,它帮助我找到了一个可能适用于你的问题的很酷的技术。

此参数将获取第一行(0 索引)中名为Max 的字段的值。

  "data": {"name": "dataset"},
  "params": [
    {
      "name": "upperLimit",
      "expr": "data('dataset')[0]['Max']"
    }
  ],

我找不到任何以这种方式记录访问数据的内容,但它出现在表达式 "data('dataset')[0]['Max']" 中: |元素|描述| |---|---| |data()|访问数据的标准方法| |dataset|Power BI/Deneb ("data": {"name": "dataset"}) 输入数据的标准名称。对于 Power BI/Deneb 之外的 Vega,这需要匹配数据元素名称。 | |[0]|行号。零是第一行,一个是第二行,等等。 |['Max']|用单引号括起来的列名。 | 因此,对于您的情况,只需确保 Max 与您的列名匹配。

然后将此代码添加到要固定到此 upperLimit 参数的轴编码中:

      "scale": {
        "domain": {"expr": "[0,upperLimit]"}

您还可以将 0 替换为 lowerLimit 参数。

这是带有突出显示和交叉过滤的完整 Deneb 规范:

{
  "data": {"name": "dataset"},
  "params": [
    {
      "name": "upperLimit",
      "expr": "data('dataset')[0]['Max']"
    }
  ],
  "layer": [
    {
      "mark": {
        "type": "bar",
        "clip": true,
        "opacity": 0.3,
        "tooltip": true
      },
      "encoding": {
        "x": {
          "field": "Value"
        }
      }
    },
    {
      "mark": {
        "type": "bar",
        "clip": true,
        "tooltip": true
      },
      "encoding": {
        "x": {
          "field": "Value__highlight"
        },
        "opacity": {
          "condition": {
            "test": {
              "field": "__selected__",
              "equal": "off"
            },
            "value": 0
          },
          "value": 1
        }
      }
    }
  ],
  "encoding": {
    "y": {
      "field": "Category",
      "type": "nominal"
    },
    "x": {
      "type": "quantitative",
      "axis": {"title": "Value"},
      "scale": {
        "domain": {"expr": "[0,upperLimit]"}
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    相关资源
    最近更新 更多