2013-06-01 43 views
1

我正在考虑在散点图上刷牙与crossfilter,它不完全清楚如何去做;我仔细看过canonical example以及Mike的scatterplot matrix brushing d3代码。交叉过滤散点图与二维刷牙

特别是,我的问题是:

  1. 查询:我不知道如何做一个2-d查询crossfilter。我应该只是:

    a。做2个1-d查询并自己交叉结果?

    b。制作一个单一的二维(即类似于data.dimension(function(d){ return [d.x, d.y];})),并在其上使用自定义过滤器功能?

  2. 性能:绘制散点图需要约150ms(vs直方图~10ms)。这使得实时更新(即使查询速度很快),并不是很好。

回答

1
  1. 我会成立于crossfilter两个维度 - 一个x和一个y的 - 并让crossfilter库相交的结果给你。 Crossfilter在幕后使用一维数据处理效果更好。如果你没有太多的数据,你只需要散点图过滤器,它可能更容易把刚才复制的花例如:

    返回E [0] [0]> d [p.x] || d [p.x]> e 1 [0] || e 0> d [p.y] || d [p.y]> e 1;

  2. 不要重绘整个散点图!看看这个花的例子,唯一改变的就是'隐藏'类的应用。如果您只更新点的颜色,则不需要150 ms来更新。此外,如果你留在原地的绘制点,你可以添加清凉transition effects

+0

谢谢。我仍然不清楚如何使交叉过滤器交叉结果。你能提供一个代码片段来勾勒出你的想法吗?另外,关于重绘的好处;通过更新课程,绘图速度更快。然而,这不是什么交叉过滤器的例子,无论出于何种原因。 –

+0

我丢失了代码snippit,试图将它作为注释发布,基本上这个文件http://roadtolarissa.com/meteors/drawMap.js中的'cartoDbIds'的ctrl-f并查看它所用的两个代码块我的解决方案,同时看着crossfilter api。 crossfilter示例不会重绘个人点,只是直方图条。 –

1
  1. 查询

    一个。 2个1-d查询。与亚当斯评论相同。使用一维数据Crossfilter将会更快。

  2. 渲染

这其中大部分我认为有渲染比查询本身更多的工作要做。亚当给了一些伟大的观点,但我想提供一些替代来源:

研究利用d3.geom.quadtreehttp://bl.ocks.org/mbostock/4343214)。这将允许您仅重新显示受影响的点。然而,这意味着对其他数据集的查询不能改变散点图中单个点的(x,y)位置;因为你必须重新编译四叉树。

另外,你有没有考虑过不同的可视化技术? 2d装箱是帮助避免性能问题的好技术:http://vis.stanford.edu/projects/datavore/splom/

2

您是否考虑过使用DC.js

DC.js是一个扩展D3.js并支持crossfilter的Javascript图表库。我刚开始使用它作为条形图,但我还没有尝试过它的散点图。它允许您以交互方式过滤和放大子集,并且使用crossfilter快速过滤。