2014-11-24 3 views
0

Я использую dc.js (http://dc-js.github.io/dc.js/) Которая является оберткой для d3 и перекрестного фильтра. Я хочу щелкнуть pieChart из dc.js Внешне.DC.JS Круговая диаграмма + Выбор Отклонения от внешней функции JavaScript

http://jsfiddle.net/nishants/Bra2H/47/

var hitslineChart = dc.lineChart("#chart-line-hitsperday"); 

var data = [ 
     {date: "12/27/2012", http_404: 2, http_200: 190, http_302: 100}, 
     {date: "12/28/2012", http_404: 2, http_200: 10, http_302: 100}, 
     {date: "12/29/2012", http_404: 1, http_200: 300, http_302: 200}, 
     {date: "12/30/2012", http_404: 2, http_200: 90, http_302: 0}, 
     {date: "12/31/2012", http_404: 2, http_200: 90, http_302: 0}, 
     {date: "01/01/2013", http_404: 2, http_200: 90, http_302: 0}, 
     {date: "01/02/2013", http_404: 1, http_200: 10, http_302: 1}, 
     {date: "01/03/2013", http_404: 2, http_200: 90, http_302: 0}, 
     {date: "01/04/2013", http_404: 2, http_200: 90, http_302: 0}, 
     {date: "01/05/2013", http_404: 2, http_200: 90, http_302: 0}, 
     {date: "01/06/2013", http_404: 2, http_200: 200, http_302: 1}, 
     {date: "01/07/2013", http_404: 1, http_200: 200, http_302: 100} 
     ]; 
var ndx = crossfilter(data); 
var parseDate = d3.time.format("%m/%d/%Y").parse; 
data.forEach(function(d) { 
    d.date = parseDate(d.date); 
    d.total= d.http_404+d.http_200+d.http_302; 
    d.Year=d.date.getFullYear(); 
}); 

var dateDim = ndx.dimension(function(d) {return d.date;}); 
var hits = dateDim.group().reduceSum(function(d) {return d.total;}); 
var minDate = dateDim.bottom(1)[0].date; 
var maxDate = dateDim.top(1)[0].date; 

hitslineChart 
    .width(500).height(200) 
    .dimension(dateDim) 
    .group(hits) 
    .x(d3.time.scale().domain([minDate,maxDate])) 
    .brushOn(false) 
    .yAxisLabel("Hits per day"); 

var yearRingChart = dc.pieChart("#chart-ring-year"); 
var yearDim = ndx.dimension(function(d) {return +d.Year;}); 
var year_total = yearDim.group().reduceSum(function(d) {return d.http_200+d.http_302;}); 

yearRingChart 
.width(150).height(150) 
.dimension(yearDim) 
.group(year_total) 
.innerRadius(30); 

dc.renderAll(); 

Я не мог найти способ, чтобы щелкнуть или вызова кода кросс фильтра внешних по отношению к dc.js widgtes.

ответ

2

Глядя на источник dc.js, клики обрабатываются на уровне графика в обработчике _onClick. Поэтому я просто позвоню этому. Вам нужно будет пройти в элементе данных вы «мыши» на:

yearRingChart._onClick(yearRingChart.data()[0]); 

Обновлено example.

+0

Спасибо большое, я видел _onClick, но не мог понял, что это должно используйте этот способ. Большое спасибо. – sudhanshu

1

Другая идея состоит в том, чтобы использовать фильтры ...

HTML

<button type="button" class="btn btn-primary" onclick=filter1()>Date Filter</button> 

JS

function filter1() { 
    yearRingChart.filter('2014'); 
    dc.redrawAll(); 
}; 
+0

Я разместил ваш фильтр здесь http://jsfiddle.net/Bra2H/57/ Но его вызывающий оттенок как в 2012 году, так и в 2013 году, ожидаемое поведение после выбора 2012 года, когда оно не выбрано при нажатии фильтра даты. – sudhanshu

+1

попытаться удалить цитаты в течение 2012 года – DataByDavid

+0

Спасибо! Цените! – sudhanshu