【问题标题】:dc.js - unable to plot line chart on averagedc.js - 无法平均绘制折线图
【发布时间】:2014-03-01 13:10:30
【问题描述】:

我正在使用dc.js 创建折线图。

fiddle 的链接。

我面临的挑战是。我正在尝试绘制当前未发生的平均值的折线图。

在小提琴中,我有两个 javascript 变量,即 - dateHitsdateDimTotal

dateHits 是使用 reduceSum 生成的,dateDimTotal 是日期的平均值。

如果我使用dateHits 对折线图进行分组。折线图出现没有任何问题。

但如果我将 dateHits 替换为 dateDimTotal,则不会出现任何内容。

有人帮我解决我做错的地方。

【问题讨论】:

    标签: javascript d3.js dc.js


    【解决方案1】:

    jsfiddle 将按日期显示平均值。

    平均值图:

    (它看起来与您的 jsfiddle 中的原始图几乎相同,但 y 轴值不同)

    我稍后会在代码中添加一些 cmets。

    编辑:评论:

    您几乎完成了,但需要几个代码才能使整个应用程序正常工作。

    我用以下方式重写了 reduceXXX() 函数:

    function reduceAdd(p, v) {
            ++p.count;
            p.total += v.value;
            if (p.count == 0) {
                p.average = 0;
            } else {
                p.average = p.total / p.count;
            };
            return p;
        }
    
        function reduceRemove(p, v) {
            --p.count;
            p.total -= v.value;
            if (p.count == 0) {
                p.average = 0;
            } else {
                p.average = p.total / p.count;
            };
            return p;
        }
    
        function reduceInitial() {
            return {
                count: 0,
                total: 0,
                average: 0
            };
    }
    

    因此,有一个字段average 将始终保持正确的值。我认为这样的代码组织更简洁,尽管可能有一些替代方案。

    我也添加了访问器功能(以便 dc.js 知道要显示什么):

        .valueAccessor(function(p) { return p.value.average; })
    

    希望这会有所帮助。如果您有其他问题或需要澄清,请告诉我。

    【讨论】:

    • 是的!我错过了.valueAccessor。我很久以前就知道了。但是忘记发到这里了。无论如何,非常感谢您的回复。
    • 你能告诉我如何从 50 或 100 而不是 0 开始 y-axis 吗?
    • 提出一个单独的问题。
    • Link。请帮忙。
    • 生动 - 请告诉我如何获取您计算的平均值的 min 值。尝试使用d3.min(function(p) { return p.value.average; }),但没有得到。请帮忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多