Сортировать ось по другому полю в Vega Lite - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь отсортировать порядковые данные по оси x по полю, отличному от того, которое я использую в качестве метки. Оба поля (я назову их «сортируемые» и «не подлежащие сортировке») являются взаимно-однозначными, то есть одно вычисляется из другого, и никогда не будет случая, когда одно «сортируемое» значение будет соответствовать двум разным «несортируемым». 'значения и наоборот.

Я пробовал два подхода:

  1. Изменение порядка сортировки для использования другого поля , например:
...
x: {
  field: 'nonsortable',
  sort: {
    field: 'sortable',
    op: 'count',
  },
},
...

Я не был уверен, какую агрегирующую операцию использовать, но поскольку два поля взаимно однозначны, это не должно иметь значения, верно?

Это каким-то образом изменило порядокчто я не понимаю, но это определенно не сортирует ось по «сортируемому» полю, как предполагалось.

Изменение метки на другое поле , например:
...
x: {
  field: 'sortable',
  axis: {
    labelExpr: 'datum.nonsortable',
  },
}
...

Это не сработало вообще. Я думаю, может быть, я неправильно понял, как работают выражения меток.

Есть ли другой способ сделать это, или, возможно, способ спасти одну из этих попыток?

1 Ответ

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

Если агрегация не требуется, вы должны передать атрибут sort без агрегата. Например ( ссылка для редактора vega ):

{
  "data": {
    "values": [
      {"sortable": 5, "nonsortable": "five"},
      {"sortable": 2, "nonsortable": "two"},
      {"sortable": 3, "nonsortable": "three"},
      {"sortable": 1, "nonsortable": "one"},
      {"sortable": 4, "nonsortable": "four"}
    ]
  },
  "mark": "point",
  "encoding": {
    "x": {
      "type": "nominal",
      "field": "nonsortable",
      "sort": {"field": "sortable"}
    }
  }
}

enter image description here

...