gpt4 book ai didi

vega-lite - 基于选择Vega-Lite的编码中动态改变Y轴场

转载 作者:行者123 更新时间:2023-12-04 08:43:25 25 4
gpt4 key购买 nike

如何根据选择动态更改为 y 轴编码的数据字段?我正在尝试构建一个可视化来显示一天 24 小时内的事件计数数据,并且我希望用户能够选择不同的时区(例如 EST、CST、MST 或 PST)。
为此,我构建了一个选择,在其中指定了我在括号中列出的所有选项,并将 EST 设置为我的默认值。我想创建一个条件,当我选择除 EST 之外的另一个选项时,我会看到可视化动态更新。我已经探索过专门为这些时间范围创建其他小时字段,或者添加条件逻辑来尝试解释这些动态变化,但我还没有找到一个好的解决方案。任何人都可以帮忙吗?
这是我的几行数据的示例

"data": {
"values": [
{
"title_column":"example",
"Type": "Technology",
"Events": "100",
"Hour": "0",
"Date": "9/1/20",
"Time Period": "Last Time"
},
{
"title_column":"example",
"Type": "Technology",
"Events": "110",
"Hour": "1",
"Date": "9/1/20",
"Time Period": "Last Time"
},
当它放在一起时,可视化看起来像这样,它会根据选择动态更新:
Time of Day Image
当我的代码是静态的时,它看起来像这样:
    "layer":[
{"mark":{
"type":"bar",
"point":true,
"color":"#FFC94E",
"height":15
},
"selection": {
"timezone": {
"type": "single",
"init": {"changer": "EST"},
"bind": {
"changer": {"input": "select",
"options": ["EST","CST (-1 Hour)","MST (-2 Hours)","PST (-3 Hours)"]}
}
}
},
"encoding":
{
"x":{"field":"Events",
"type":"quantitative",
"aggregate":"sum",
"axis":null},
"y": {"field":"Hour",
"type":"ordinal",
"axis":{
"labelSeparation":1,
"labelPadding":4,
"title":null
}
}
}}]
}
但是,特别关注 y 编码 在代码的底部,理想情况下我希望使其具有动态性。我想我可以为每个时区创建计算,然后编写一个如下所示的条件,但我无法让它工作。任何帮助是极大的赞赏!
"y": {
"condition": {
"selection": {"timezone" : "EST"},
"datum": "datum.Hour"
}
"condition": {
"selection": {"timezone" : "CST (-1 Hour)"},
"datum": "datum.Hour_CST"
}
...
}
这是我的代码的链接:
vega editor .

最佳答案

选择只能过滤列值,而不是列名。幸运的是,您可以使用 Fold Transform 将列名转换为列值。 .
为了完成你想要的,我建议如下:

  • 使用一系列Calculate Transforms计算包含要显示的值的新列。
  • 使用 Fold Transform将这些值堆叠到具有关联键列的单个列中。
  • 将选择绑定(bind)链接到折叠变换中创建的键列。
  • 使用 Filter Transform根据选择
  • 过滤值
  • 最后,添加行编码,以便在轴上标记所选列。

  • 放在一起,它看起来像这样( open in vega editor):
    {
    "width": 300,
    "data": {
    "values": [...]
    },
    "transform": [
    {"filter": {"field": "Time Period", "equal": "Last Time"}},
    {"calculate": "datum.Hour - 0", "as": "EST"},
    {"calculate": "datum.Hour - 1", "as": "CST (-1 Hour)"},
    {"calculate": "datum.Hour - 2", "as": "MST (-2 Hours)"},
    {"calculate": "datum.Hour - 3", "as": "PST (-3 Hours)"},
    {
    "fold": ["EST", "CST (-1 Hour)", "MST (-2 Hours)", "PST (-3 Hours)"],
    "as": ["Zone", "Hour"]
    },
    {"filter": {"selection": "timezone"}}
    ],
    "selection": {
    "timezone": {
    "type": "single",
    "init": {"Zone": "EST"},
    "bind": {
    "Zone": {
    "name": "timezone",
    "input": "select",
    "options": [
    "EST",
    "CST (-1 Hour)",
    "MST (-2 Hours)",
    "PST (-3 Hours)"
    ]
    }
    }
    }
    },
    "mark": {"type": "bar", "point": true, "color": "#FFC94E", "height": 15},
    "encoding": {
    "x": {
    "field": "Events",
    "type": "quantitative",
    "aggregate": "sum",
    "axis": null
    },
    "y": {
    "field": "Hour",
    "type": "ordinal",
    "axis": {"labelSeparation": 1, "labelPadding": 4, "title": null}
    },
    "row": {
    "field": "Zone",
    "type": "nominal",
    "title": null
    }
    }
    }
    enter image description here

    关于vega-lite - 基于选择Vega-Lite的编码中动态改变Y轴场,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64449715/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com