2015-03-02 41 views
1

我已经在D3中创建了一个条形图,选择了单选按钮条形图并且我想按升序或降序排序。当点击它不排序按钮,所以我不知道是什么文牛逼错误的,但任何帮助,将不胜感激:排序D3中的条形图不起作用

http://jsfiddle.net/m4s5m5je/2/ [前添加分类]

后,我把排序按钮,条形图没有按” T显示了,太排序按钮:

http://jsfiddle.net/m4s5m5je/3/

var sort_btn = document.getElementById('sort') 
sort_btn.on("click", function(){ 
    var self = d3.select(this); 
    var ascending = function(a,b){ 
      return a.value - b.value; 
    }; 
    var descending = function(a,b){ 
      return b.value - a.value; 
    } 
    var state = +self.attr("state"); 
    var txt = "Sort data: "; 
    if(state === 0){ 
      data.sort(ascending); 
      state = 1; 
      txt += "descending"; 
    } else if(state === 1){ 
      data.sort(descending); 
      state = 0; 
      txt += "ascending"; 
    } 
    self.attr("state", state); 
    self.html(txt); 
+0

你应该得到的按钮并保存到变量试图访问它。添加下一行 - var sort_btn = document.getElementById('sort')' - before'sort_btn.on('click'' – 2015-03-02 06:33:48

回答

0

你错过了结尾括号});

和移动sort_btn实现了plot.call

为了使分选的作品,你应该解决更多的地方。

updated fiddle

plot.call(chart, { 
      data: data, 
      axis:{ 
      x: xAxis, 
      y: yAxis 
      }, 
      gridlines: yGridlines 
     }); 
var sort_btn = document.getElementById('sort') 
sort_btn.on("click", function(){ 
var self = d3.select(this); 
var ascending = function(a,b){ 
     return a.value - b.value; 
}; 
var descending = function(a,b){ 
     return b.value - a.value; 
} 
var state = +self.attr("state"); 
var txt = "Sort data: "; 
if(state === 0){ 
     data.sort(ascending); 
     state = 1; 
     txt += "descending"; 
} else if(state === 1){ 
     data.sort(descending); 
     state = 0; 
     txt += "ascending"; 
} 
self.attr("state", state); 
self.html(txt); 

}); 
+0

可以给我一些想法,因为我是D3新手。 – Pando 2015-03-02 08:19:08

+0

我没有经过你的逻辑,我能想到的排序是每次你点击排序按钮,排序数据和重绘图表。我也不是d3的专家,也许还有另一个更好的解决方案:) – 2015-03-02 08:23:39