首页 文章

dc.js / Crossfilter - 创建具有维度平均值的序数条形图?

提问于
浏览
1

完整的JS小提琴数据示例如下:https://jsfiddle.net/ojrhn96y/2/ .

我有一些带有两个值的数据: AchievementBalance . 我目前用dc.js创建了两个文本元素,用于跟踪两个值的平均值 . 但是,我想要一个带有x轴 ['Achievement', 'Balance'] 的条形图,然后将 [achievement_sum, balance_sum] 作为其y值,每个指标都有一个条形 .

我该如何创建这种类型的条形图?

我有我的平均值,使用以下内容创建:

achievementAvg = achievement.groupAll().reduceSum(
    function(d) {
      return d.achievement;
    }),

但我不确定如何将这些值分配给单独的栏 .

1 回答

  • 1

    由于您基本上是在轮换数据,因此crossfilter不直接支持这种行为,它希望过滤和聚合行,而不是列 .

    但是你可以使用"fake group",只要你不想想它 . )

    首先,我们需要创建一个完全无用的维度对象,因为dc.js想要一个 . 如果你找到了一种过滤这些类别的方法,那么你可以在这里实现它:

    var bogus_dimension = {};
    

    然后这里是假组,一个实现 all 方法的对象,它返回一个 {key,value} 对的数组,就像一个真正的组:

    var fake_group = {
        all: function() {
            return [{key: 'Achievement', value: achievementAvg.value()/ndx.size()},
                    {key: 'Balance', value: balanceAvg.value()/ndx.size()}];
        }
    }
    

    我们用序数标度初始化条形图:

    dc.barChart('#bar-chart')
        .width(200)
        .height(200)
        .dimension(bogus_dimension)
        .group(fake_group)
        .xUnits(dc.units.ordinal)
        .x(d3.scale.ordinal())
    

    这里有你所有代码的小提琴:https://jsfiddle.net/gordonwoodhull/x03f37bk/8/

相关问题