Участок Вега-Лайт Уилкинсон, сгруппированный по первой цифре - PullRequest
1 голос
/ 29 октября 2019

Я вижу код для создания точечного графика Уилкинсона в Vega-Lite:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "description": "A Wilkinson Dot Plot",
  "height": 100,
  "data": {
    "values": [
      10,11,11,11,14,15,17,
      22,25,26,28,
      33,33,33,34,37
    ]
  },
  "transform": [{
    "window": [{"op": "rank", "as": "id"}],
    "groupby": ["data"]
  }],
  "mark": {
    "type": "circle",
    "opacity": 1
  },
  "encoding": {
    "x": {"field": "data", "type": "ordinal"},
    "y": {"field": "id", "type": "ordinal", "axis": null, "sort": "descending"}
  }
}

Создает график, объединяющий точные числа, но я бы хотел, чтобы вывод был по первой цифре, так что7 вертикальных точек для 1, 4 вертикальных точки для 2 и 5 вертикальных точек для 3. Я попытался добавить calculation: "str.map(x => x.charAt(0))" в массив преобразования, чтобы сгруппировать его, но безуспешно в моем выполнении. Любые идеи приветствуются!

1 Ответ

1 голос
/ 29 октября 2019

Вы были на правильном пути, за исключением того, что для вычисления преобразований нельзя использовать произвольный код JavaScript, а только подмножество, доступное в Vega Expressions . Так, например, вы можете сделать что-то вроде этого ( Vega Editor ):

{
  "data": {
    "values": [10, 11, 11, 11, 14, 15, 17, 22, 25, 26, 28, 33, 33, 33, 34, 37]
  },
  "transform": [
    {"calculate": "floor(datum.data / 10)", "as": "data"},
    {
      "window": [{"op": "rank", "field": "data", "as": "id"}],
      "groupby": ["data"]
    }
  ],
  "mark": {"type": "circle", "opacity": 1},
  "encoding": {
    "x": {"field": "data", "type": "ordinal"},
    "y": {"field": "id", "type": "ordinal", "axis": null, "sort": "descending"}
  }
}

enter image description here

...