【问题标题】:Limiting bar chart to show top K bars by width of bar限制条形图按条形宽度显示前 K 个条形
【发布时间】:2019-04-14 05:18:16
【问题描述】:

我正在尝试使用我的数据集数据集进行一些 Vega-lite 可视化。我的数据集中的字段是:record_id、subject、tag。 Record_id 是数据集的唯一标识符,但每个数据集可以有多个主题和多个标签,因此每个数据集的主题和标签的每个可能组合都有一行。 我想要一个条形图,显示每个标签有多少数据集被该标签标记。但是有数百个标签,条形图中无法显示,所以我想限制在前 K 个,但哪些标签显示最多。

我试图遵循这个"Top-K Plot With Others in Vega-Lite" 的例子,他按全球总票房绘制了前 K 名导演。但是,当我只是根据我正在绘制的相同标准选择 top 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 之间的条形图(我通过在 pandas 中进行相同的分析知道标签计数在 1 和 1632 之间。)

我看到了正确的条数,但 x 轴从 0 到 1.0,每个条都延伸到 1.0。

【问题讨论】:

    标签: vega-lite


    【解决方案1】:

    您应该使用已经计算的聚合值{field: "tag_count"},而不是使用{field: "record_id", aggregate: "distinct"} 进行x 编码,然后您的图表将按预期工作。

    编辑:这是您的图表与您在评论中提供的数据的样子,使用这种方法:vega editor link

    【讨论】:

    • 感谢您的回复!你的第一个建议对我不起作用。 (我应该包括这个,但我觉得我最初的帖子已经太长了!)我尝试将 x 编码为 tag_count 但我的条形长度为零。 ` encoding: { x: { //aggregate: "distinct", field: "tag_count", type: "quantitative", axis: { title: "Data Sets with this Tag"} }, y: { field: "tag" ,类型:“名义”,排序:{ op:“distinct”,字段:“record_id”,顺序:“descending” } } } }`
    • 它对我有用,我生成的一些数据与您描述的相符。我建议更新您的问题以包含完整的MCVE,以便消除猜测。指向图表的vega-editor 版本的链接会很有帮助。
    • This observable notebook 作为 MCVE 工作
    • 这看起来像是 observable 的问题,而不是 Vega-Lite 的问题;请参阅我修改后的答案。您的数据在第 135-140 行附近有一些损坏的值;这可能是导致问题的原因。
    • 我修复了导致这些损坏值的编码问题。感谢您注意到这一点,但我认为这无关。我认为最后,我的问题是我错过了聚合定义周围的方括号。非常感谢您的宝贵时间。