Ограничение столбчатой ​​диаграммы для отображения верхних K столбцов по ширине столбца

Я пытаюсь сделать некоторые визуализации Vega-lite с моим набором данных наборов данных. Поля в моем наборе данных: record_id, subject, tag. Record_id - это уникальный идентификатор для набора данных, но каждый набор данных может иметь несколько субъектов и несколько тегов, поэтому для каждой возможной комбинации темы и тега для каждого набора данных есть одна строка. Я хочу, чтобы столбчатая диаграмма показывала для каждого тега, сколько наборов данных было помечено этим тегом. Но есть сотни тегов, слишком много для отображения на гистограмме, поэтому я хочу ограничиться до K, но какие теги отображаются чаще всего.

Я попытался проследить за этим "Топ-K график с Другие в Vega-Lite », где он определяет топ-директоров K по совокупному мировому брутто. Но, может быть, есть более простой способ сделать это, когда я просто выбираю топ k на основе тех же критериев, по которым я строю график? Я также открыт для разных способов показать одни и те же отношения.

VegaLite({
      data: {values: data},
      title: "Top k Tags",
      mark: {type: "bar", tooltip: null},
      transform: [
        { aggregate: { 
           op: "distinct", 
           field: "record_id", 
           as: "tag_count"}, 
          groupby: ["tag"]},    // aggregate on "tag" field and count within the groups         
        { window: [
          { op: "row_number", 
            as: "tag_rank"}], 
          sort: [{ 
            field: ["tag_count"], 
            order: "descending" }]},
        { filter: `datum.tag_rank < 21`}     
      ],
      encoding: {
        x: {
          aggregate: "distinct",
          field: "record_id", 
          type: "quantitative", 
          axis: {title: "Data Sets with this Tag"}
        },
        y: {
          field: "tag",
          type: "nominal",
          sort: { op: "distinct", field: "record_id", order: "descending" }
        }
      }
    })

Я ожидаю увидеть горизонтальную гистограмму с 20 столбцами со значениями от 1632 до 100 (из того же анализа в пандах я знаю, что количество тегов составляет от 1 до 1632).

Я вижу нужное количество полосок, но ось абсцисс идет от 0 до 1.0, а каждая полоса простирается до 1.0.


person eirb    schedule 14.04.2019    source источник


Ответы (1)


Вместо использования {field: "record_id", aggregate: "distinct"} для кодировки x вы должны использовать уже вычисленное агрегированное значение {field: "tag_count"}, и тогда ваша диаграмма будет работать должным образом.

Изменить: вот что ваша диаграмма выглядит как с данными вы указали в комментарии, используя этот подход: вега редактор ссылка

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

person jakevdp    schedule 15.04.2019
comment
Спасибо за ваш ответ! Ваше первое предложение не сработало для меня. (Я должен был включить это, но мне показалось, что мой первоначальный пост был уже слишком длинным!) Я попытался кодировать x как tag_count, но тогда мои столбцы имели нулевую длину. `encoding: {x: {// агрегат: отдельный, field: tag_count, тип: количественный, ось: {title: Наборы данных с этим тегом}}, y: {field: tag, type: nominal, sort: {op: отдельный, поле: идентификатор_записи, порядок: по убыванию}}}} ` - person eirb; 16.04.2019
comment
У меня это сработало с некоторыми данными, которые я сгенерировал, которые соответствуют тому, что вы описываете. Я предлагаю обновить ваш вопрос, включив в него полный MCVE, чтобы избежать догадок. Ссылка на версию вашей диаграммы vega-editor была бы наиболее полезной. - person jakevdp; 16.04.2019
comment
Этот наблюдаемый блокнот работает как MCVE. - person eirb; 27.04.2019
comment
Похоже, проблема с наблюдаемым, а не с Vega-Lite; см. мой измененный ответ. В ваших данных есть поврежденные значения в строках 135–140; это может быть причиной проблемы. - person jakevdp; 27.04.2019
comment
Я исправил проблему с кодировкой, которая приводила к повреждению значений. Спасибо, что заметили это, но я не думаю, что это было связано. Думаю, в конце концов, моя проблема заключалась в том, что мне не хватало квадратных скобок вокруг определения агрегата. Большое спасибо за ваше время. - person eirb; 01.05.2019