Диаграмма Vega-lite не работает, когда связанное поле в поиске используется в легенде - PullRequest
1 голос
/ 24 апреля 2020

Почему этот код Vega-lite не отображает диаграмму? Для соединения таблиц используется преобразование, а в легенде используется одно из полей второй таблицы.

Ссылка Vega Editor

{
  "data": {    
          "values": [ 
            {"group": 1, "person": "Alan"},
            {"group": 1, "person": "George"},
            {"group": 1, "person": "Fred"},
            {"group": 2, "person": "Steve"},
            {"group": 2, "person": "Nick"},
            {"group": 2, "person": "Will"},
            {"group": 2, "person": "Cole"},
            {"group": 3, "person": "Rick"},
            {"group": 3, "person": "Tom"}
          ]},
  "transform": [
    {
      "lookup": "person",
      "from": {
        "data": {    
          "values": [
              {"name": "Alan", "_source": { "age": 10, "category": 15}},
              {"name": "Tom", "_source": { "age": 7, "category": 35}},
              {"name": "Fred", "_source": { "age": 17, "category": 75}}
          ]},
        "key": "name",
        "fields": ["_source.age", "_source.category"]
      }
    },
    {"calculate": "datum.person+' '+datum._source.category", "as": "legend"},
    {"aggregate": 
      [{"op": "sum", "field": "_source.age", "as": "totalage"}], 
      "groupby": ["totalage", "legend", "_source.category"]}
  ],
  "mark": "bar",
  "encoding": {
    "x": {"field": "_source.category", "type": "ordinal"},
    "y": {"field": "totalage", "type": "quantitative"},
    "color": {
      "field": "legend",
      "title": "My Legend",
      "legend": {"orient": "top", "columns": 3}
    }
  }
}

Но эта Vega ли код успешно отображает диаграмму? Он использует поиск преобразования для объединения таблиц, и ни одно из полей второй таблицы не используется в легенде.

Ссылка Vega Editor

{
  "data": {    
          "values": [ 
            {"group": 1, "person": "Alan"},
            {"group": 1, "person": "George"},
            {"group": 1, "person": "Fred"},
            {"group": 2, "person": "Steve"},
            {"group": 2, "person": "Nick"},
            {"group": 2, "person": "Will"},
            {"group": 2, "person": "Cole"},
            {"group": 3, "person": "Rick"},
            {"group": 3, "person": "Tom"}
          ]},
  "transform": [
    {
      "lookup": "person",
      "from": {
        "data": {    
          "values": [
              {"name": "Alan", "_source": { "age": 10, "category": 15}},
              {"name": "Tom", "_source": { "age": 7, "category": 35}},
              {"name": "Fred", "_source": { "age": 17, "category": 75}}
          ]},
        "key": "name",
        "fields": ["_source.age", "_source.category"]
      }
    },
    {"calculate": "datum.person+' '+datum.group", "as": "legend"},
    {"aggregate": 
      [{"op": "sum", "field": "_source.age", "as": "totalage"}], 
      "groupby": ["totalage", "legend", "_source.category"]}
  ],
  "mark": "bar",
  "encoding": {
    "x": {"field": "_source.category", "type": "ordinal"},
    "y": {"field": "totalage", "type": "quantitative"},
    "color": {
      "field": "legend",
      "title": "My Legend",
      "legend": {"orient": "top", "columns": 3}
    }
  }
}

1 Ответ

1 голос
/ 24 апреля 2020

Проблема в строке

{"calculate": "datum.person+' '+datum._source.category", "as": "legend"}

Это говорит о том, что нужно искать атрибут category datum._source. Но ваши данные не имеют столбец с именем "_source", он имеет столбец с именем "_source.category".

Чтобы исправить это, вы можете ссылаться на столбец следующим образом:

{"calculate": "datum.person+' '+datum['_source.category']", "as": "legend"}

Открыть диаграмму в редакторе Vega

...