[英]Using multiple fields in one crossfilter dimension for a dc.js dashboard
在我的數據集中,我有4列,其格式如下:
基本上,我們一直在跟蹤患者,一旦事件發生,從該時隙到結束的所有值都是真實的。 因此,要查看某個時間的生存百分比,我需要查看當時具有“假”值的人數,我試圖將其放入折線圖(dc.js),其中x-as表示時間和y軸表示包含“ false”(當時)的數據集的百分比
我首先嘗試使用4個不同的維度(每個字段1個)進行此操作。 這不能正常工作。
我假設我需要將這4個字段整合為一個維度。
我有一個printfilter函數來檢查我的尺寸和組是否正常工作:
function print_filter(filter){
var f=eval(filter);
if (typeof(f.length) != "undefined") {}else{}
if (typeof(f.top) != "undefined") {f=f.top(Infinity);}else{}
if (typeof(f.dimension) != "undefined") {f=f.dimension(function(d) { return "";}).top(Infinity);}else{}
console.log(filter+"("+f.length+") = "+JSON.stringify(f).replace("[","[\n\t").replace(/}\,/g,"},\n\t").replace("]","\n]"));
};
當我在myDimension.group.reduceCount()上調用此過濾器時,我希望輸出如下:
[{0 : 100}, {13: 48}, {26 : 60}, {52: 72}]
對象中的第一項是以星期為單位的時間,第二項是當時有錯誤的人所占的百分比
我應該如何設置維度和組以實現此輸出?
更新:嘗試使用下面的代碼也不起作用:
var recDim = {
x0: cf1.dimension(function(d){return d.recidiefNa0;}),
x13: cf1.dimension(function(d){return d.recidiefNa13;}),
x26: cf1.dimension(function(d){return d.recidiefNa26;}),
x52: cf1.dimension(function(d){return d.recidiefNa52;})
};
var recGroup = {
0: recDim.x0.group(),
13: recDim.x13.group(),
26: recDim.x26.group(),
52: recDim.x52.group()
} ;
print_filter(recGroup);
更新2:我嘗試使用4個尺寸來代替,並制作一個復合的折線圖。 這是當前代碼。 它計算並在正確位置放置數據點,因為它的4個不同的圖表確實顯示了正確的線
var recDim0 = cf1.dimension(function(d){ return [d.recidiefNa0]});
var recDim13 = cf1.dimension(function(d){return [d.recidiefNa13]});
var recDim26 = cf1.dimension(function(d){return [d.recidiefNa26]});
var recDim52 = cf1.dimension(function(d){return [d.recidiefNa52]});
var recGroup0 = recDim0.group();
var recGroup13 = recDim13.group();
var recGroup26 = recDim26.group();
var recGroup52 = recDim52.group();
var scChart = dc.compositeChart("#scStepChart");
scChart
.width(600)
.height(400)
.x(d3.scale.linear().domain([0,52]))
.y(d3.scale.linear().domain([0,100]))
.clipPadding(10)
.brushOn(false)
.xAxisLabel("tijd in weken")
.yAxisLabel("percentage vrij van residu/recidief")
.compose([
dc.lineChart(scChart)
.dimension(recDim0)
.group(recGroup0)
.renderDataPoints(true)
.renderTitle(false)
.keyAccessor(function(d) {return 0;})
.valueAccessor(function(d){return d.value/cf1.groupAll().reduceCount().value()*100;}),
dc.lineChart(scChart)
.dimension(recDim13)
.group(recGroup13)
.renderDataPoints(true)
.renderTitle(false)
.colors(['blue'])
.keyAccessor(function(d){return 13;})
.valueAccessor(function(d){return d.value/cf1.groupAll().reduceCount().value()*100;}),
dc.lineChart(scChart)
.dimension(recDim26)
.group(recGroup26)
.renderDataPoints(true)
.renderTitle(false)
.colors(['blue'])
.keyAccessor(function(d){return 26;})
.valueAccessor(function(d){return d.value/cf1.groupAll().reduceCount().value()*100;}),
dc.lineChart(scChart)
.dimension(recDim52)
.group(recGroup52)
.renderDataPoints(true)
.renderTitle(false)
.colors(['blue'])
.keyAccessor(function(d){return 52;})
.valueAccessor(function(d){return d.value/cf1.groupAll().reduceCount().value()*100})
])
.xAxis().ticks(4);
scChart.render();
這是結果,如您所見,該行顯示不正確。
http://postimg.org/image/gitdw1yj9/
注釋中是JSFiddle和CodePen的鏈接
在@Gordon的幫助下解決了該問題。 將我的數據格式改回一個字段:以星期數為值。
使用這個fakegroup,我能夠得到正確的圖形:
function accumulate_subtract_from_100_and_prepend_start_point_group(source_group) {
return {
all:function () {
var cumulate = 100;
var result = [];
return [{key: 0, value: cumulate}]
.concat(source_group.all().map(function(d) {
cumulate -= d.value;
return {key:d.key, value:cumulate};
}));
}
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.