Crossfilter和D3:按组and维度进行过滤
Crossfilter and D3: Filter by group AND dimension
我尝试使用crossfilter
在维度和组上同时过滤数据。比如说,我希望能够在我的"byCylinders"维度上filterExact
,同时过滤我的groupByBrand
组的值(按品牌名称减少汽车数量)。(选中两个复选框)。
参见代码:http://jsbin.com/xajuc/2/watch?js,输出
我看到的问题是,我不能同时识别两个过滤器,或者我不知道如何正确绑定d3.data()
。
我知道我可以创建一个新的"特别"维度,但由于维度很昂贵,这可能不是最好的方法。
有什么想法吗?
问题不在于交叉过滤器的使用,而在于d3显示器。由于您没有使用交叉过滤器进行品牌过滤,因此可以使用该维度来获取结果(然而,在同一维度上不会观察到任何dimension.filter
)。
问题是,对于已更改但未删除的垃圾箱,您没有更新步骤。Crossfilter不会自动删除包含0个项目的垃圾箱,因此垃圾箱的实际数量不会随着byCylinders.filter
的变化而变化,只有大小。因此,当只点击圆柱体复选框时,没有进入或退出——只有其他过滤器真正删除了垃圾箱。
因此,通过在插入后添加更新步骤,您可以看到数字的变化:
var result = d3.select("body")
.select("div#result")
.selectAll("div")
.data(resultData);
result.enter()
.append("div");
result
.text(function(d){
return d.key + " : " + d.value + " cars found";});
这利用了.enter()
中的项目在处理后立即可用于更新的事实。
http://jsbin.com/qesafu/2/edit
您可以将数据作为.json引入,压缩各种数据元素,并将整个数据集传递.data()。我认为以下内容也适用于您的过滤器。我会像你把你的数据(不一定经过过滤)作为一个整体来解释这一点。希望这将阐明.data()如何与d3中的相关数据一起使用。
data.json示例:
{
"property1":[0, 0, 0, 0],
"property2":['name1', 'name2', 'name3', 'name4']
}
以.json:的形式输入数据
d3.json("data.json", function(data) {
// zip the two (or more) attributes of your data
data = d3.zip(data.property1, data.property2).map(function(d) {
property1 = +d[0];
property2 = +d[1];
// return object for each property
return {prop1: property1, prop2: property2};
});
}
然后.data()可以得到zip:
.data(data)
一次只能调用其中一个数据属性:
// histogram example
d3.layout.histogram()
.bins()
.value( function(d) { return d.attr1; })
(data)
你看到.value
是如何只返回zip的一个属性的吗?但另一处房产仍有关联。您可以有多个属性,将一些属性用于您可能正在进行的任何计算,然后将其他属性用作这些数据属性的元数据,因为它们都被压缩在一个很好的小捆绑包中。
另一种选择是将一个数组/data传递给.data(),并对另一个使用索引。
此处列出的两个选项:
d3阵列输入线图示例
这里有一个前者的详细例子:
http://bl.ocks.org/patrickberkeley/9162034
我认为这些概念就是你所追求的。如果我错了,请告诉我。
- 有可能过滤来自嵌入式YouTube的声音吗
- 为什么我的d3.jsselectAll+过滤器没有过滤
- Selenium WebDriver and JavaScript change
- ui网格日期单元格过滤器,过滤日期格式导致显示错误的日期
- PHP and Javascript functions
- Javascript Return and if/else
- SetTimeout and clearTimeout in Javascript
- Angular:使用选择列表选择过滤代码中的对象
- lightbox in html 5 and javascript
- TimelineJS and AngularJS
- timeago.js with datatable and PHP
- javascript button ajax and php
- Ajax and Json with Rails
- Combine onload, onresize and onclick
- 在单击时过滤 JSON
- php布尔值's小写AND大写和数字布尔值'可以接受
- 如何在BookshelfJS中通过加入来过滤结果
- Crossfilter和D3:按组and维度进行过滤
- Angularjs应用程序中使用AND运算过滤ng个基于重复的多个属性
- 使用jQuery过滤列表,当输入多个单词时,使用AND条件