Обойти это, чтобы отобразить график vega-lite на основе столбца времени периода? - PullRequest
0 голосов
/ 29 января 2020

Я задаю этот вопрос в качестве продолжения: Оригинальный вопрос

Основное требование c очень простое: отобразить результаты спортивных соревнований на графике, основанном на человекочитаемый период времени. Например, 8 лучших мужчин, 800 м, из Рио-де-Жанейро 2016 года.

Rank    Name                    Time
1   David Lekuta Rudisha        1:42.15 
2   Taoufik Makhloufi       1:42.61 
3   Clayton Murphy          1:42.93 
4   Pierre-Ambroise Bosse       1:43.41 
5   Ferguson Cheruiyot Rotich   1:43.55 
6   Marcin Lewandowski      1:44.20 
7   Alfred Kipketer         1:46.02 
8   Boris Berian            1:46.15

Были некоторые проблемы, такие как: Нулевая точка для отметки времени не очень хорошо определена, поэтому гистограмма не подходит для временной данные.

Буду признателен за любой обходной путь для отображения результатов периода времени для решения такой проблемы.

Спасибо, Yoav

1 Ответ

0 голосов
/ 29 января 2020

Vega-lite не имеет собственного типа данных для представления периодов времени, он имеет только тип данных, представляющий временные метки. При использовании меток времени для отметок времени нулевая точка зависит от контекста, поэтому Vega-Lite не будет пытаться определить ее для вас.

Для ваших данных я, вероятно, подхожу к ней следующим образом:

  • Используйте аргумент parse в ваших данных, чтобы указать ожидаемый формат ваших временных меток, как в исходном вопросе
  • Используйте преобразование timeUnit, чтобы вручную вычислить соответствующую нулевую точку для ваших данных: здесь yearmonthdate timeUnit работает хорошо, потому что он убирает часы, минуты и секунды.
  • Используйте кодировку y2 в своей полосе, чтобы указать эту нулевую точку для своей отметки.

В совокупности результат может выглядеть примерно так ( Vega Editor ):

{
  "data": {
    "values": [
      {"Rank": 1, "Name": "David Lekuta Rudisha", "Time": "1:42.15"},
      {"Rank": 2, "Name": "Taoufik Makhloufi", "Time": "1:42.61"},
      {"Rank": 3, "Name": "Clayton Murphy", "Time": "1:42.93"},
      {"Rank": 4, "Name": "Pierre-Ambroise Bosse", "Time": "1:43.41"},
      {"Rank": 5, "Name": "Ferguson Cheruiyot Rotich", "Time": "1:43.55"},
      {"Rank": 6, "Name": "Marcin Lewandowski", "Time": "1:44.20"},
      {"Rank": 7, "Name": "Alfred Kipketer", "Time": "1:46.02"},
      {"Rank": 8, "Name": "Boris Berian", "Time": "1:46.15"}
    ],
    "format": {"parse": {"Time": "date:'%M:%S.%L'"}}
  },
  "transform": [
    {"timeUnit": "yearmonthdate", "field": "Time", "as": "zeropoint"}
  ],
  "mark": "bar",
  "encoding": {
    "x": {"field": "Name", "type": "nominal"},
    "y": {
      "field": "Time",
      "timeUnit": "minutessecondsmilliseconds",
      "type": "temporal",
      "title": "Time"
    },
    "y2": {"field": "zeropoint", "timeUnit": "minutessecondsmilliseconds"}
  },
  "$schema": "https://vega.github.io/schema/vega-lite/v4.0.0.json"
}

enter image description here

...