Получить базовые значения гистограммы BEGAIN VEGA (Lite)? - PullRequest
1 голос
/ 17 марта 2020

Как вы можете извлечь и отобразить значения, используемые для вычисления максимума бин-баров в гистограмме Веги?

В этой записываемой записной книжке d3 Я иллюстрирую, что хочу достичь ... При нажатии на бар я обновляю переменную selected_text базовыми значениями бара, которые были подсчитаны, чтобы дать максимум бара.

* связанный вопрос *1011* связан с преобразование fold, но в моем случае я ищу инверсию flatten transform.

Вот иллюстрация преобразования данных, которое я ищу. Переходя от:

[
    {"name": "alpha", "data": 123, "bin0": 1, "bin1": 2},
    {"name": "alpha", "data": 789, "bin0": 2, "bin1": 3},
    {"name": "beta",  "data": 456, "bin0": 2, "bin1": 3},
    {"name": "beta",  "data": 789, "bin0": 3, "bin1": 4},
    {"name": "beta",  "data": 0AB, "bin0": 3, "bin1": 4}
]

к

[
    "bin0": 1, "bin1": 2, values: [{"name": "alpha", "data": 123}]
    "bin0": 2, "bin1": 3, values: [{"name": "alpha", "data": 789},
                   {"name": "beta", "data": 456}]
    "bin0": 3, "bin1": 4, values: [{"name": "beta", "data": 789},
                   {"name": "beta", "data": 0AB}]
]

Я думаю, что этого можно достичь, если бы выражение concat было доступно для groupby operator из aggregation transforms, но это нет.

Ответы [ 2 ]

2 голосов
/ 18 марта 2020

Преобразование «без ошибок» может быть грубо достигнуто с помощью агрегатного преобразования с агрегатом values:

{
  "data": {
    "values": [
      {"name": "alpha", "data": 123, "bin0": 1, "bin1": 2},
      {"name": "alpha", "data": 789, "bin0": 2, "bin1": 3},
      {"name": "beta", "data": 456, "bin0": 2, "bin1": 3},
      {"name": "beta", "data": 789, "bin0": 3, "bin1": 4},
      {"name": "beta", "data": 789, "bin0": 3, "bin1": 4}
    ]
  },
  "transform": [
    {
      "aggregate": [{"op": "values", "as": "values"}],
      "groupby": ["bin0", "bin1"]
    }
  ],
  "mark": "point"
}

В средстве просмотра данных Vega Editor вы можете увидеть что преобразованные данные:

[
  {"bin0": 1, "bin1": 2,
   "values": [{"name": "alpha", "data": 123, "bin0": 1, "bin1": 2}]},
  {"bin0": 2, "bin1": 3,
   "values": [{"name": "alpha", "data": 789, "bin0": 2, "bin1": 3},
              {"name": "beta", "data": 456, "bin0": 2, "bin1": 3}]},
  {"bin0": 3, "bin1": 4,
   "values": [{"name": "beta", "data": 789, "bin0": 3, "bin1": 4},
              {"name": "beta", "data": 0AB, "bin0": 3, "bin1": 4}]}
]
0 голосов
/ 18 марта 2020

Учитывая ответ Джейка, вот полный пример в Веге того, к чему я стремился.

{
  "$schema": "https://vega.github.io/schema/vega/v5.json",
  "description": "A histogram of film ratings, modified to include null values.",
  "width": 400,
  "height": 200,
  "padding": 5,
  "autosize": {"type": "fit", "resize": true},
  "signals": [
    {"name": "binCount", "update": "(bins.stop - bins.start) / bins.step"},
    {"name": "barStep", "update": "(width ) / (1 + binCount)"},
            {
      "name": "tooltip",
      "value": {},
      "on": [
        {"events": "rect:mouseover", "update": "slice(datum.dlist,0,2)"},
        {"events": "rect:mouseout",  "update": "{}"}
      ]
    }
  ],
  "data": [
    {
      "name": "table",
      "values": [
        {"name": "alpha", "data": "123"},
        {"name": "alpha", "data": "789"},
        {"name": "beta", "data": "456"},
        {"name": "beta", "data": "789"},
        {"name": "gamma", "data": "789"},
        {"name": "beta", "data": "300"}
      ],
      "transform": [
        {"type": "extent", "field": "data", "signal": "extent"},
        {
          "type": "bin",
          "signal": "bins",
          "field": "data",
          "extent": {"signal": "extent"},
          "maxbins": 4
        }
      ]
    },
      {
      "name": "aggregat",
      "source": "table",
      "transform": [
        {
          "type": "aggregate",
          "groupby": ["bin0", "bin1"],
          "ops": ["values"],
          "fields": ["undefined"],
          "as": ["values"]
        }

      ]
    },
    {
      "name": "counts",
      "source": "table",
      "transform": [{"type": "aggregate", "groupby": ["bin0", "bin1"]},
       {
          "type": "lookup",
          "from": "aggregat",
          "key": "bin0",
          "fields": ["bin0"],
          "values": ["values"],
          "as": ["dlist"]
        }]
    }
  ],
  "scales": [
    {
      "name": "yscale",
      "type": "linear",
      "range": "height",
      "round": true,
      "nice": true,
      "domain": {"fields": [{"data": "counts", "field": "count"}]}
    },
    {
      "name": "xscale",
      "type": "linear",
      "range": [{"signal": "barStep "}, {"signal": "width"}],
      "round": true,
      "domain": {"signal": "[bins.start, bins.stop]"},
      "bins": {"signal": "bins"}
    }
  ],
  "axes": [
    {"orient": "bottom", "scale": "xscale", "tickMinStep": 0.5},
    {"orient": "left", "scale": "yscale", "tickCount": 5, "offset": 5}
  ],
  "marks": [
    {
      "type": "rect",
      "from": {"data": "counts"},
      "encode": {
        "update": {
                    "tooltip" : { "signal": "tooltip"},
          "x": {"scale": "xscale", "field": "bin0", "offset": 1},
          "x2": {"scale": "xscale", "field": "bin1"},
          "y": {"scale": "yscale", "field": "count"},
          "y2": {"scale": "yscale", "value": 0},
          "fill": {"value": "steelblue"}
        },
        "hover": {"fill": {"value": "firebrick"}}
      }
    }
  ]
}
...