我是一名Crossfilter新手,并试图弄清楚如何为特定群体创建特定的群组和维度。具体来说,这是我正在使用的简化JSON:
[
{"name": "New York","count": 354,"terms": [{"name": "N/A","hits": 200 }, {"name": "Brooklyn","hits": 225},{"name": "Queens","hits": 1}},
{"name": "San Francisco","hits": 120,"terms": [{"name": "Chinatown","hits": 268},{"name": "Downtown","hits": 22}},
{"name": "Seattle","hits": 34,"terms": [{"name": "N/A","hits": 2},{"name": "Freemont","hits": 25}}
]
我已经有一张饼图,其中每件都代表城市。现在我要做的是当我点击一个特定的馅饼(比如说“纽约”)时,我希望有一个行图表,显示纽约的术语数组值作为维度。我不确定我是否在这里使用正确的术语,但我想基本上使用饼图作为摘要视图,并使用行图来深入显示每个城市的术语。
如何使用Crossfilter执行此操作?我实际上使用的是dc.js,但在dc.js为我渲染之前,我仍然需要为Crossfilter创建尺寸和组。
答案 0 :(得分:4)
首先,我会稍微重新组织您的数据 - 这样的事情可能适合您:
var data = [{
"city": "New York",
"neighborhood": "N/A",
"hits": 200
}, {
"city": "New York",
"neighborhood": "Brooklyn",
"hits": 225
}, {
"city": "New York",
"neighborhood": "Queens",
"hits": 1
}, {
"city": "San Francisco",
"neighborhood": "Chinatown",
"hits": 268
}, {
"city": "San Francisco",
"neighborhood": "Downtown",
"hits": 22
}, {
"city": "Seattle",
"neighborhood": "N/A",
"hits": 2
}, {
"city": "Seattle",
"neighborhood": "Freemont",
"hits": 25
}];
以下是我为什么要压平数据的相关stackoverflow问题:Does Crossfilter require a flat data structure?
从那里,您可以为城市和社区创建维度和组:
var ndx = crossfilter(data),
cityDimension = ndx.dimension(function (d) {
return d.city;
}),
cityGroup = cityDimension.group().reduceSum(function (d) {
return d.hits;
}),
neighborhoodDimension = ndx.dimension(function (d) {
return d.neighborhood;
}),
neighborhoodGroup = neighborhoodDimension.group().reduceSum(function (d) {
return d.hits;
});
现在,当您创建图表时,它们将连接到彼此的选择:
pieChart.width(200)
.height(200)
.slicesCap(4)
.dimension(cityDimension)
.group(cityGroup);
rowChart.width(500)
.height(500)
.dimension(neighborhoodDimension)
.group(neighborhoodGroup);
dc.renderAll();
以下是此示例的jsfiddle:http://jsfiddle.net/djmartin_umich/Xbd4X/
DC.js尚不支持默认删除具有0值的行,在这种情况下您可能需要这些值。
如果您需要此行为,可能需要引用此主题:https://groups.google.com/forum/#!topic/dc-js-user-group/WKofifAkThg