首页 > 解决方案 > 在 Observable Plot 中,如何从 bin() 变换中对堆栈进行排序/排序?

问题描述

我正在 Observable 的新Plot库中处理堆积条形图。来自 Vega 和 D3 的情况还不错,但我无法找到或弄清楚如何从我正在使用的Plot.binX()中订购生成的堆叠条。

我今天的实际标记看起来像这样:

Plot.rectY(hourlyUsageData, Plot.binX({
      y: "sum", 
      title: bin => bin[0].Name
    }, {
      x: d => d3.timeHour.count(d3.timeDay(d.DateTime), d.DateTime),
      y: d => d.kWh,
      thresholds: 24,
      fill: "Name",
      //order: "sum",
      //reverse: true
    }))

Plot.binX()做得很好,产生一个图表,其中堆栈根据输入顺序进行排序。

我希望根据总和对堆栈进行排序,事实上,如果我添加Plot.stack选项order(参见上面的注释行),我可以按总和排序:

错误排序的堆叠条

关闭!现在我只需要颠倒顺序。我假设,因为我可以使用该order选项,也许我也可以使用该reverse选项(参见上面的注释行)。 那似乎行不通

我的第二个假设是,由于这些转换应该是“可组合的”,我应该能够将 mybinX与 a结合起来stackY,但我找不到这种组合的例子。我尝试过Plot.stackY(Plot.binX({...}, { ... order:"sum", reverse:true }), 和类似的变体,但它们似乎也不起作用

总之,我很想知道如何在使用 binX 的同时控制堆叠条形图中的堆叠顺序。谢谢!

标签: plotdata-visualizationobservablehq

解决方案


谢谢你。似乎有一个错误,并且 bin 转换无用地消耗了 {order} 选项。我们会努力解决这个问题。同时,您可以将其添加到 bin 变换的“外部”,如下所示:

Plot.rectY(data,
  Plot.stackY({
    ...Plot.binX(
      { y: "count" },
      { x: "body_mass", fill: "species", order: "sum" }
    ),
    reverse: true
  })
).plot()

解决此问题的拉取请求:https ://github.com/observablehq/plot/pull/439


推荐阅读