【问题标题】:Sorting (ordering) the bars in a bar chart by the bar values with dc.js使用 dc.js 按条形值对条形图中的条形进行排序(排序)
【发布时间】:2014-10-02 00:13:16
【问题描述】:

如何按维度的计算值而不是维度本身的名称对 dc.js 示例中的 x 轴(维度)进行排序?

例如,考虑 dc.js 的顺序条形图示例:

https://github.com/dc-js/dc.js/blob/master/web/examples/ord.html

如何按水果数量的降序对 x 轴进行排序?

这是我尝试过的:(jsfiddle: http://jsfiddle.net/gautam/re9r9kk7/)

var counts = [
  {name: "apple", cnt: 10},
  {name: "orange", cnt: 15},
  {name: "banana", cnt: 12},
  {name: "grapefruit", cnt: 2},
  {name: "grapefruit", cnt: 4}
];

var ndx            = crossfilter(counts),
    fruitDimension = ndx.dimension(function(d) {return d.name;}),
    sumGroup       = fruitDimension.group().reduceSum(function(d) {return d.cnt;});

chart
  .width(768)
  .height(380)
  .x(d3.scale.ordinal())
  .xUnits(dc.units.ordinal)
  .brushOn(false)
  .xAxisLabel("Fruit")
  .yAxisLabel("Quantity Sold")
  .dimension(fruitDimension)
  .barPadding(0.1)
  .outerPadding(0.05)
  .group(sumGroup);

【问题讨论】:

  • 你的小提琴不适合我。

标签: javascript sorting bar-chart dc.js crossfilter


【解决方案1】:

基础 mixin 上有一个名为 chart.ordering() 的函数。

它专门用于在不需要字母默认值时更改序数值的顺序。传递给此函数的函数接受 {key,value} 对并返回一个值以进行排序。

要按值降序排列条形,您可以这样做

chart.ordering(function(d) { return -d.value; })

【讨论】:

    【解决方案2】:

    这可能不是最好的方法,但基本上我是这样做的:

    var sortByCnt = counts.sort(function (a, b) { return a.cnt < b.cnt; });
    var names = sortByCnt.map(function (d) { return d.name; });
    
    chart
      .width(768)
      .height(380)
      .x(d3.scale.ordinal().domain(names))
      .xUnits(dc.units.ordinal)
      .brushOn(false)
      .xAxisLabel("Fruit")
      .yAxisLabel("Quantity Sold")
      .dimension(fruitDimension)
      .barPadding(0.1)
      .outerPadding(0.05)
      .group(sumGroup);
    

    它给出了结果:

    【讨论】:

    • 啊,是的,这也有效,并且可能在下面具有相同的效果。
    • 聪明!谢谢。 .ordering() 对我不起作用(1.7.3 版)
    猜你喜欢
    • 2018-12-21
    • 2017-12-06
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多