简体   繁体   English

vega-lite 中的计算

[英]Calculations in vega-lite

is there a way to dynamically calculate growth rates in Vega-Lite.有没有办法在 Vega-Lite 中动态计算增长率。

For example:例如:

    [
      {"date": "1/1/2020", "b": 27},
      {"date": "1/2/2020", "b": 30},
      {"date": "1/3/2020", "b": 33}
    ]

How could I create data (and a chart) that shows the daily +3 (or the ~+10%)?我如何创建显示每日 +3(或 ~+10%)的数据(和图表)?


Edit: Thanks for the answer, @jakevdp.编辑:感谢您的回答,@jakevdp。

Should have outlined the added complexity earlier;应该早点概述增加的复杂性; apologies: I need to aggregate prior to calculating changes.道歉:我需要在计算变化之前进行汇总。 See below for the data and my attempt (dates seem offset and last date's drop doesn't make sense.请参阅下面的数据和我的尝试(日期似乎偏移,最后日期的下降没有意义。

[Vega Editor][1] [织女星编辑器][1]

{
  "data": {
    "values": [
      {"date": "2020-01-01", "country": "CHN", "count": 0},
      {"date": "2020-01-02", "country": "CHN", "count": 2},
      {"date": "2020-01-03", "country": "CHN", "count": 4},

      {"date": "2020-01-01", "country": "GER", "count": 0},
      {"date": "2020-01-02", "country": "GER", "count": 2},
      {"date": "2020-01-03", "country": "GER", "count": 4},
      {"date": "2020-01-04", "country": "GER", "count": 6}
    ]
  },
"transform": [
    {
      "aggregate": [{"op": "sum", "field":"count", "as":"daily_count"}],
      "groupby": ["date"]
    },
    {
      "window": [
        {"op": "lead", "field": "daily_count", "as": "daily_count_tomorrow"}
      ]
    },
    {"filter": "isValid(datum.daily_count_tomorrow)"},
    {"calculate": "datum.daily_count_tomorrow - datum.daily_count", "as": "change"}
  ],

  "mark": "bar",
  "encoding": {
    "x": {"type": "ordinal", "field": "date", "timeUnit": "yearmonthdate"},
    "y": {"type": "quantitative", "field": "change"}
  }
}


  [1]: https://vega.github.io/editor/#/url/vega-lite/N4KABGBEAmCGAutIC4yghSA3WAbArgKYDOKYA2uBhMDAoWZAEwAMrAtCwIydeQA0UAMYB7fADt4AJwCejAMIAJAHIDhYyWRYBfflWq048BqmZsWvTkzWRRE6XNNLVg2xvhkmu-RkP1GrBzcnADMNnaSsgoq4e5kACzePjR0xgHmltyx9lGmAOIAogBK2ZqoOnrUKUYmUIEWwWylDoyFJa4RHqhelVV+aab1mWEd7rlQbc0J3lVoqbVmQTws8c3jkJOj9mQAbNo+ALpU3pDSsOLEAGYiUgC2ZJQGyVCwAOavUoSv-qjktCIAB0YxHw91clwAloRcNAUG5tq5YKRkHQIbgZAB9TqQbQHXrUSAfMQAgBGjgo80gR2oM18z0gAHcIeJoCIGQ9nilAYxcIRYLDwVCYYw4GjMdjEcioKL0Vj3Bj4CJbjcpGycc9qRhaSlIbhjFJGBDiAA1PAQ6AACiMoIAdDLxfLFcqpKqGQBKHH4uZCPBCfC4H7ShC2+1y+wKpUqtlgdhga23O2wMVhzSSxhCAAW51eDH2EDxICokFusCkAGtGCTSwIi4RxKJoMzXmR0BhIAAPFunGQAhY3RviPA2SHQ2GmGo2eAQ26EACq4ghXSgMj5dxEkgzE+1y678B7CwAjvhzlPEFOsAxBaP01nxDn1RB9togA

Yes, you can do this using the window transform with the lead or lag operation.是的,您可以使用带有leadlag操作的窗口变换来完成此操作。 For example ( vega editor ):例如( 织女星编辑器):

{
  "data": {
    "values": [
      {"date": "2020-01-01", "b": 29},
      {"date": "2020-01-02", "b": 30},
      {"date": "2020-01-03", "b": 32},
      {"date": "2020-01-04", "b": 31},
      {"date": "2020-01-05", "b": 34}
    ]
  },
  "transform": [
    {"window": [{"op": "lead", "field": "b", "as": "b1"}]},
    {"filter": "isValid(datum.b1)"},
    {"calculate": "datum.b1 - datum.b", "as": "change"}
  ],
  "mark": "bar",
  "encoding": {
    "x": {"type": "ordinal", "field": "date", "timeUnit": "yearmonthdate"},
    "y": {"type": "quantitative", "field": "change"},
    "color": {
      "condition": {"test": "datum.change > 0", "value": "green"},
      "value": "red"
    }
  }
}

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM