【问题标题】:Crossfilter and dc.js mean valueCrossfilter 和 dc.js 均值
【发布时间】:2015-07-14 19:00:42
【问题描述】:

我有这个数据集:

tick    ID    Name    val1    val2    val3    val4
0       1     Name1    0.7    0.1       0.2    0.1
1       2     Name2    0.8    0.1       0.1    0.1
2       3     Name3    0.4    0.1       0.2    0.3
3       4     Name4    0.6    0.1       0.2    0.1
4       1     Name1    0.7    0.1       0.2    0.1
5       2     Name2    0.8    0.1       0.1    0.1
6       3     Name3    0.4    0.1       0.2    0.3
7       4     Name4    0.6    0.1       0.2    0.1

我已经用 crossfilter 和 dc.js 可视化了所有内容,除了一张图表。我想要 val1、val2、val3 和 val4 列的平均值。

我已经用 dc.js 可视化了这张地图。数据中的 ID 是图像中的一个段。刻度是圆形的,例如在刻度 2 处 id 为 1 的对象具有值 0.7、0.1、0.2 和 0.1。所以平均数据应该连接到段。例如,当只选择 ID 为 1 的蓝色对象时,它应该显示当前选择的平均值:

tick    ID    Name    val1    val2    val3    val4
0       1     Name1    0.7    0.1       0.2    0.1
4       1     Name1    0.7    0.1       0.2    0.1

如果我选择 ID 为 2 的第二个对象,它应该显示两个段的平均值:

tick    ID    Name    val1    val2    val3    val4
0       1     Name1    0.7    0.1       0.2    0.1
1       2     Name2    0.8    0.1       0.1    0.1
4       1     Name1    0.7    0.1       0.2    0.1
5       2     Name2    0.8    0.1       0.1    0.1

也许我可以在饼图中显示两个对象的平均值。在哪里我可以看到四个类 val1、val2、val3 和 val4 的平均值。所以我想将它们设置为如下关系:

Sum val1 3
Sum val2 0.4
Sum val3 0.6
Sum val4 0.4

Sum all 4.4

所以类在饼图上的大小如下:

val1 3/4.4 = 0.68 = 68 percent
val2 0.4/4.4 = 0.090 = 9 percent
val3 ...
val4 ...

我怎样才能做到这一点,因为这是唯一不起作用的可视化。

【问题讨论】:

  • 这个问题在这里可能会有所帮助:stackoverflow.com/questions/21519856/…
  • 您好,感谢您的回复。我从链接检查了解决方案,但存在问题。在解决方案中,他使用第一行来定义维度,在我的情况下是 val1, val2.... 但问题是我在列中没有这些值,它们仅在第一行中。有没有不重新组织数据的解决方案?
  • 如果可以的话,我认为最好的解决方案是重新组织数据。我目前不知道其他方法,但也许您可以等待其他人评论/回答
  • 我很困惑为什么这不仅仅是取四个总和和四个平均值,只是比@Ben 链接的答案稍微复杂一些。但是,您的示例输出根本没有显示任何平均值,所以我很困惑您要做什么
  • 也许你的意思是聚合好了,你只需要用fake group把列变成组值?

标签: javascript d3.js dc.js crossfilter


【解决方案1】:

有趣的是,人们有多少种不同的方式来解释他们的数据结构和他们需要的结果。即使有非常详细的解释,有时也不会传达信息。无论如何,我听说这篇文章与我的post 相似。 Gordon 建议我使用reductio。 但是,我深入研究了其他一些帖子,最终使用了 add remove initial 方法。 我创建了一个jsfiddle,它为您提供每个名称的百分比。我想从其他更熟悉 DC 的人那里知道这是否正确完成。

   var data = d3.csv.parse( d3.select("pre#data").text() );     
            data.forEach(function (d) {
            d.tick = +d.tick
            d.id = +d.ID;
            d.name = d.Name;
            d.val1 = +d.val1;
            d.val2 = +d.val2;
            d.val3 = +d.val3;
            d.val4 = +d.val4;
        });

【讨论】:

  • 您好,感谢您的回复,但我想在 x 轴上显示 val1、val2、val3 和 val4,而不是名称。在 y 轴上应显示 4 组 val1、val2、val3 和 val4 的相对值。
  • 我不得不改变数据结构,它不是那么平坦。
猜你喜欢
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 2015-05-15
  • 1970-01-01
相关资源
最近更新 更多