来自JSON数组的Crossfilter维度

时间:2014-01-14 18:15:47

标签: javascript json visualization crossfilter dc.js

我是一名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创建尺寸和组。

1 个答案:

答案 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