限制条形图以按条宽显示前 K 个条

Limiting bar chart to show top K bars by width of bar

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

我试着按照这个 "Top-K Plot With Others in 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 之间(我从 pandas 中进行的相同分析中知道标签计数介于 1 和 1632 之间。)

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

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

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