Vega Lite / Kibana - Отметка области не показывает значений

У меня довольно простая проблема, но я новичок в Vega / Vega-Lite, и примеры руководств не очень помогают мне решить мою проблему.

Когда я пытаюсь отобразить свои значения с плавающей запятой, кажется, работает только Mark: Point / Bar. Все остальное, что требует соединения между соседними точками, похоже, не работает, например Area или Line.

Что я пропустил, чтобы связать свои значения с диаграммой с областями? Агрегация? Слой? Неправильно ли вычислены значения временных меток?

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "data": {
    "url": {
      "%context%": true,
      "%timefield%": "@timestamp",
      "index": "default-*",
      "body": {"size": 10000, "_source": ["@timestamp", "numericData"]}
    },
    "format": {"property": "hits.hits"}
  },
  "transform": [
    {"calculate": "toDate(datum._source['@timestamp'])", "as": "time"}
  ],
  "vconcat": [
    {
      "width": 1200,
      "mark": {"type": "area", "line": true, "point": true},
      "encoding": {
        "x": {
          "field": "time",
          "scale": {"domain": {"selection": "brush"}},
          "type": "temporal",
          "axis": {"title": ""}
        },
        "y": {
          "field": "_source.numericData",
          "type": "quantitative",
          "scale": {"domain": [0, 10]}
        }
      }
    },
    {
      "width": 1200,
      "height": 60,
      "mark": {"type": "area", "line": true, "point": true},  // <-- only points are rendered :(
      "selection": {"brush": {"type": "interval", "encodings": ["x"]}},
      "encoding": {
        "x": {"field": "time", "type": "temporal"},
        "y": {
          "field": "_source.numericData",
          "type": "quantitative",
          "formatType": "String",
          "axis": {"tickCount": 3, "grid": false}
        }
      }
    }
  ]
}

Точки видны - значения есть, но область не отображается, потому что, как я подозреваю, мне нужно указать Vega Lite интерпретировать числовые значения с плавающей запятой на Y для интерпретации во всем временном поле.

Снимок экрана


person Ganymede    schedule 12.12.2020    source источник


Ответы (1)


Вы не поделились своими данными, поэтому я могу только догадываться, почему это происходит. Но одна из причин, по которой вы можете увидеть этот результат, заключается в том, что в ваших данных есть пустые значения. Вот простой пример этого (открыть в редакторе) :

{
  "data": {
    "values": [
      {"x": 1, "y": 1},
      {"x": 2, "y": null},
      {"x": 3, "y": 2},
      {"x": 4, "y": null},
      {"x": 5, "y": 3},
      {"x": 6, "y": null}
    ]
  },
  "mark": {"type": "area", "point": true, "line": true},
  "encoding": {
    "x": {"field": "x", "type": "quantitative"},
    "y": {"field": "y", "type": "quantitative"}
  }
}

введите описание изображения здесь

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

Если это так, то вы можете удалить точки нуль с помощью соответствующего фильтра преобразования (открыть в редакторе):

{
  "data": {
    "values": [
      {"x": 1, "y": 1},
      {"x": 2, "y": null},
      {"x": 3, "y": 2},
      {"x": 4, "y": null},
      {"x": 5, "y": 3},
      {"x": 6, "y": null}
    ]
  },
  "transform": [{"filter": "isValid(datum.y)"}],
  "mark": {"type": "area", "point": true, "line": true},
  "encoding": {
    "x": {"field": "x", "type": "quantitative"},
    "y": {"field": "y", "type": "quantitative"}
  }
}

введите описание изображения здесь

person jakevdp    schedule 12.12.2020
comment
Вы, сэр, благословение! "filter": "datum._source['numericData'] != null" сделал это! Большое спасибо за то, что указали мне правильное направление. Я исследую, почему я получаю нулевые значения между ними при извлечении данных журнала из ES. - person Ganymede; 12.12.2020