过滤掉所有数据后,NVD3气泡图会消失

时间:2018-05-29 13:20:26

标签: javascript nvd3.js angular-nvd3

我有一个过滤器,用于过滤NVD3气泡图的数据。

当没有数据或某些数据被过滤时,图表运行良好。

但是,当我从图表中过滤掉所有数据时,图表完全消失。发生这种情况时,即使重新过滤结果也不会使图表重新出现。我必须刷新页面才能重新出现。

有没有办法确保页面上总是有一个空轴 - 即使没有数据?或者另外一个修复?

编辑:当我在控制台中收到此错误时,它会说:“TypeError:减少没有初始值的空数组”并指向我的代码块:

    d3.select(idChartBubble_Tab3 + ' svg')
        .datum(dataBubble3)
        .call(chartBubble_Tab3);

    //nv.utils.windowResize(chart_tab3_bubble.update);

    return chartBubble_Tab3;

我附上了以下代码(我不确定有多少相关内容,但这不是我的项目,我之前没有使用过NVD3):

 nv.addGraph(function () {
    chartBubble_Tab4 = nv.models.multiChartSP2()
        .showLabelDots(true)
        .idChart(idChartBubble_Tab4)
        .useVoronoi(true)
        .showLegend(false)
        .First_length(dataBubble4.length)
        .margin({top: 30, right: 30, bottom: 50, left: 75})
    ;

    chartBubble_Tab4.scatters1
        .pointRange([1000 * Math.PI / 2, 10000 * Math.PI / 2]);
    chartBubble_Tab4.scatters2
        .pointRange([1000 * Math.PI / 2, 10000 * Math.PI / 2]);

    chartBubble_Tab4.xAxis
        .axisLabel('Click Effectiveness')
        .tickFormat(function (d) {
            return numeral(d).format("0,0.00%");
        });

    chartBubble_Tab4.yAxis1
        .axisLabel('Fractional CPA')
        .tickFormat(function (d) {
            return numeral(d).format("$0,0.00a");
        });

    chartBubble_Tab4.scatters1.dispatch.on('elementClick', mouseclick_scatter_bb4);

    chartBubble_Tab4.tooltip.contentGenerator(function (data) {
        var str = '<table><tbody>';
        if(data.series[0].all.type == "line"){
            str = str + '<tr><td class="key">' + 'Average:' + '</td><td class="value">' +  numeral(data.point.x).format("0,0.00%") + '</td></tr>';
        }else {
            str = str + '<tr><td class="key">' + 'Site:' + '</td><td class="value">' + data.series[0].all.st_ + '</td></tr>';
            str = str + '<tr><td class="key">' + 'Channel:' + '</td><td class="value">' + data.series[0].all.ch_ + '</td></tr>';
            str = str + '<tr><td class="key">' + 'Tactic:' + '</td><td class="value">' + data.point.name + '</td></tr>';
            str = str + '<tr><td class="key">' + 'Fractional Conversions:' + '</td><td class="value">' + numeral(data.point.size).format("0,0.0") + '</td></tr>';
            str = str + '<tr><td class="key">' + 'Fractional CPA:' + '</td><td class="value">' + numeral(data.point.y).format("$0,0.00") + '</td></tr>';
            str = str + '<tr><td class="key">' + 'Click Effectiveness:' + '</td><td class="value">' + numeral(data.point.x).format("0,0.00%") + '</td></tr>';
        }
        str = str + '</tbody></table>';
        return str;
    });

    d3.select(idChartBubble_Tab4 + ' svg')
        .datum(dataBubble4)
        .call(chartBubble_Tab4);

    //nv.utils.windowResize(chart_tab3_bubble.update);

    return chartBubble_Tab4;
});

还添加了过滤功能(这是项目中的4个之一,但它们都非常相似

 $scope.change_state_son = function(idx_father, idx_son){
    $scope.filtering[idx_father].sons[idx_son].selected = !$scope.filtering[idx_father].sons[idx_son].selected;
    //Re-Draw
    generateDataTab4($scope.filtering);
    resizeTab4();
    if ($scope.expandTab5) {
        draw_Bubble_Tab3();
    } else {
        draw_Bubble_Tab4();
    }
};

0 个答案:

没有答案