2014-12-23 2 views
1

Я пытаюсь отфильтровать 10 лучших элементов при нажатии кнопки 10, но не отображается.Как мы можем фильтровать диаграмму строк dc.js?

Вот мой код:

hastaneRowChart 
     .width(300) 
     .height(1000) 
     .margins({top: 20, left: 10, right: 10, bottom: 20}) 
     .transitionDuration(750) 
     .dimension(hastaneDim) 
     .group(hastaneGroup) 
     .colors(d3.scale.category10()) 
     .valueAccessor(function (p) {return p.value.vaka;}) 
     .renderLabel(true) 
     .gap(9) 
     .title(function(p) { return ""; }) 
     .ordering(function(d) { return -d.value }) 
     .elasticX(true) 
     .xAxis().ticks(5).tickFormat(d3.format("s")); 

здесь фильтрации кода при нажмите:

$("#top10hast").click(function(){ 
      var h=hastaneDim.top(10); 
      hastaneDim.filter(h[0]); 
      dc.filterAll(); 
    }); 

Что с этим кодам? Она не работает

ответ

0

Попробовать ссылки на диаграмму, а не размер ...

function filterz() { 
    hastaneRowChart.filter(h[0]); 
    dc.redrawAll(); 
}; 
+0

Также не работает (10) – coder1

+0

is the empty results or only 10 results in not order? Если при заказе возникла проблема, попробуйте сортировать данные, прежде чем выбрать первую десятку. Может быть, вы можете предоставить нам jsfiddle, чтобы упростить отладку? – DataByDavid

2

по умолчанию, DC использует group.all()

chart.data(function(group) { 
    return group.all(); 
}); 

Try, чтобы обеспечить свои собственные данные функция:

chart.data(function(group) { 
    return group.top(maxItems); 
}); 

$("#top10hast").click(function(){ 
     var maxItems=10; 
     dc.filterAll(); 
}); 

Опасайтесь, что предоставление собственной функции данных может отключить некоторые функции на некоторых графиках. Альтернативой является создание пользовательского фильтра для crossfilter

https://github.com/dc-js/dc.js/wiki/FAQ#filter-the-data-before-its-charted

var filtered_group = filter_top (group) 

hastaneRowChart 
    .group(filter_top)  

function filter_top(source_group) { 
    return { 
    all:function() { 
     return source_group.top(maxItems); 
     }); 
    } 
}; 

}

+0

с версии dc.js версии 2.0.0-beta.5 это, к сожалению, пока не работает на dataTable: https://github.com/dc-js/dc.js/issues/651 – Cibes

0
  1. Фильтрация по размеру используемой диаграммы не будет влиять на эту таблицу, только другие диаграммы. Вам понадобится другое измерение на том же ключе, если вы хотите повлиять на эту диаграмму.
  2. dimension.top() возвращает верхние строки, а не верхние значения/ключи. Таким образом, вы не можете передать результат непосредственно chart.filter(); вам нужно извлечь hastane из строки.
  3. Вы фильтруете одно значение. Возможно, вы хотите отфильтровать диапазон. Предполагая, что hastane является полем строки:

    hastaneDim.filterRange ([h [9] .hastane, h [0] .hastane]);