nvd3图表奇怪的行为与日期范围滑块

时间:2014-10-08 07:48:31

标签: angularjs nvd3.js

在显示带有Ajax请求的nvd3图表时,图表正在连线。所以我认为问题是由于异步调用延迟而发生的(可能是图表在加载完整数据之前显示等)。所以我使用了承诺,但我仍然遇到同样的问题。请参阅plunker http://plnkr.co/edit/AcIpmki7GNvcoT6Z38Pm?p=preview

如果更改日期范围滑块,主图表将无法正常显示。我不确定问题出在哪里?在搜索了论坛中的一些帖子之后,我遇到了一些像时间序列中的差距,这是由于那个原因吗?如果是这种情况,我该如何解决时间序列差距问题?我搜索了nvd3网站,但是我找不到任何关于填补时间序列数据空白的文档。一些论坛帖子建议使用c3.js代替nvd3,但我不知道转移到c3.js真的值得吗?根据我的经验,我觉得nvd3是最好的,我不想离开nvd3。

如果nvd3网站提供更多样本,包括实时系列数据和一些常见问题的文档,如填补时间序列中的空白,排序数据等,对初学者来说真的很有用。

由于我的项目发布日期即将来临,我不知道现在该怎么办?转向c3.js对我来说是最糟糕的选择。我也从同一个plunker附上了错误屏幕。

我觉得我使用json数据进行排序没有问题:

  angular.forEach($scope.data, function(
                                        series, index) {
                                    series.values.sort(function(a, b) {
                                        return a.x - b.x;
                                    });
                                });

Date Range Slider Mismatch

1 个答案:

答案 0 :(得分:0)

您可以看一些问题:

  1. 我同意shabeer90,数据很时髦。您有多个值同时发生。

  2. 您的排序是正确的,但是您在代码中的位置并不起作用...尝试将其添加到ajax调用的响应中(在设置$ scope.data = data之后)。

  3. 此外,您需要进行我在another question中概述的更改(到lineWithFocusChart模型中的nvd3)。

  4. 访问xScale有点棘手......在此图表中,您需要查看以下内容:

  5. $scope.options = {
        chart: {
        type: 'lineWithFocusChart',
        height: 450,
        margin : {
            top: 20,
            right: 20,
            bottom: 60,
            left: 40
        },
        transitionDuration: 500,
        lines : { // <-- add this
            xScale : d3.time.scale()
        },
        lines2 : { // <-- add this too
            xScale : d3.time.scale()
        },
        xAxis: {
            ticks : d3.time.months, <-- add the time interval
            axisLabel: 'X Axis',
            tickFormat: function(d){
                return  d3.time.format('%d/%m/%y')(new Date(d))
            }
        },
        x2Axis: {
            tickFormat: function(d){
                return  d3.time.format('%d/%m/%y')(new Date(d))
            }
        },
        yAxis: {
            axisLabel: 'Y Axis',
            tickFormat: function(d){
                return d3.format(',.2f')(d);
            },
            rotateYLabel: false
        },
         y2Axis: {
            tickFormat: function(d){
                return d3.format(',.2f')(d);
            }
        }
    }
    
         

    };