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

凯尔C

如何根据选择动态更改为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"
        },

并将其组合在一起时,可视化效果如下图所示,并根据选择内容进行动态更新:

时间图像

当我的代码是静态的时,它看起来像这样:

    "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编辑器

jakevdp

选择只能过滤列值,不能过滤列名。幸运的是,您可以使用Fold Transform将列名转换为列值

为了完成您想要的,我建议以下内容:

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

放在一起,看起来像这样(在vega编辑器中打开):

{
  "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
    }
  }
}

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

vega-lite:可调选择?

来自分类Dev

Vega-lite:根据选择自定义轴样式

来自分类Dev

Vega-lite:根据选择自定义轴样式

来自分类Dev

Vega lite选择N个对象(数量)

来自分类Dev

基于选择列表选择在APEX中动态更改值

来自分类Dev

Vega-lite中的动态比例域

来自分类Dev

Vega-lite-超出图表范围时删除选择

来自分类Dev

基于选择的角度动态验证

来自分类Dev

删除Vega Lite日期X轴中的小刻度

来自分类Dev

在 vega-lite 中订购标称轴值

来自分类Dev

基于表单选择的Symfony动态表单

来自分类Dev

基于选择列内容的动态联接(postgres)

来自分类Dev

动态对齐文本。基于选择输入值

来自分类Dev

基于CharField选择动态生成Django表单

来自分类Dev

Vega-Lite:是否可以根据日期/时间范围定义选择?

来自分类Dev

Vega-Lite / Altair添加标签以选择下拉菜单

来自分类Dev

Vega-Lite-是否可以为两个不同的图使用相同的选择器?

来自分类Dev

更改基于URL哈希选择的单选按钮

来自分类Dev

在Vega-lite中刷放大X和Y

来自分类Dev

在Vega-lite中分层汇总图表时夹紧y轴

来自分类Dev

Vega-lite:无法在hconcat图上解析双Y轴

来自分类Dev

基于选择的选择选项获取动态添加 DIV

来自分类Dev

具有基于Rails中select选择的动态表单

来自分类Dev

angularjs中基于动态行添加+下拉选择

来自分类Dev

如何基于ValueMember在ComboBox中设置选择?

来自分类Dev

在Scala中基于String选择案例类

来自分类Dev

如何基于另一个选择字段值动态更改选择字段?

来自分类Dev

如何在选择字段中添加基于条件的选择状态

Related 相关文章

热门标签

归档