nvd3交互式指南悬停不正常

时间:2014-05-27 15:54:23

标签: javascript svg graph d3.js nvd3.js

我正在使用累积折线图跟踪多个指标。我图表上的互动指南非常反应迟钝。只有当我将鼠标悬停在图表上非常小(~1px)的区域时,才会显示该指南。下面是图表创建的javascript:

nv.addGraph(function() {
    var chart = nv.models.cumulativeLineChart().x(function(d) {
        return d[0];
    }).y(function(d) {
        return d[1];
    }).color(d3.scale.category10().range())
        .useInteractiveGuideline(true)
        .forceY([0]).showControls(false);

    var rotate = 0;
    if (datasets[0].values.length > 9) {
        rotate = -45;
    }

    chart.xAxis.showMaxMin(false).tickFormat(function(d) {
        if (inTimeFrame === 'day' || inTimeFrame === 'week')
            return d3.time.format('%b %e')(new Date(parseInt(d)));
        if (inTimeFrame === 'month')
            return d3.time.format('%b, %Y')(new Date(parseInt(d)));
        if (inTimeFrame === 'hour')
            return d3.time.format('%b %e %H:00')(new Date(parseInt(d)));

        return d3.time.format('%b %e %H:00 %Y')(new Date(parseInt(d)));
    }).tickValues(function() {
        var values = [], i = 0, numRows = datasets[0].values.length;
        var numLabels = 20, freqLabel = Math.floor(numRows / numLabels);
        var displayLabel = Math.floor(freqLabel / 2);

        $.each(datasets[0].values, function(a, b) {
            if (numRows > numLabels) {
                if (i === displayLabel) {
                    values.push(b[0]);
                    i++;
                } else if (i === freqLabel) {
                    i = 0;
                } else {
                    i++;
                }
            } else {
                if (i != 0) {
                    values.push(b[0]);
                }
                i++;
            }
        });
        return values;
    }).rotateLabels(rotate);

    chart.yAxis.tickFormat(d3.format(',.1%'));

    d3.select('#trend-svg').datum(datasets).transition().duration(500).call(chart);

    var state = chart.state();
    for (var i = 0; i < state.disabled.length; i++) {
        if (i > 2) {
            state.disabled[i] = true;
        }
    }

    chart.dispatch.changeState(state);
    chart.update();
    nv.utils.windowResize(chart.update);

    return chart;
});

有关问题可能是什么的任何建议?我在其他地方有另一个累积折线图,工作正常,我无法弄清楚如何使这个行为正常。

以下是工作图的代码:

nv.addGraph(function() {
    var chart = nv.models.cumulativeLineChart()
        .x(function(d) { return d[0] })
        //adjusting, 100% is 1.00, not 100 as it is in the data
        .y(function(d) { return d[1] / 100 })
        .color(d3.scale.category10().range())
        .useInteractiveGuideline(true)
        .forceY([0,1])
        .showControls(false);
        var rotate = 0;
        if(allData[0].values.length > 9){
        rotate = -45;
        }
        chart.xAxis
        .showMaxMin(false)
        .tickFormat(function(d) {
        if(inTimeFrame === 'day' || inTimeFrame === 'week')
            return d3.time.format('%b %e')(new Date(d));
        if(inTimeFrame === 'month')
            return d3.time.format('%b, %Y')(new Date(d));
        if(inTimeFrame === 'hour')
            return d3.time.format('%b %e %H:00')(new Date(d));
        return d3.time.format('%b %e %H:00 %Y')(new Date(d));
        })
        .tickValues((function(){
            var values = [],
            i = 0,
            numRows = allData[0].values.length,
            numLabels = 20,
            freqLabel = Math.floor(numRows / numLabels),
            displayLabel = Math.floor(freqLabel / 2);
            $.each(allData[0].values, function(a,b){
                if(numRows > numLabels){
                        if(i === displayLabel){
                        values.push(b[0]);
                        i++;
                    }else if(i === freqLabel){
                        i = 0;
                    }else{
                        i++;
                    }
                }else{
                    if(i!=0){
                        values.push(b[0]);
                    }
                i++;
                }
            })
            return values;
        }))
        .rotateLabels(rotate);

        chart.yAxis.tickFormat(d3.format(',.1%'));

        d3.select('#responseAllGraph')
            .datum(allData)
            .transition().duration(500)
            .call(chart);

        nv.utils.windowResize(chart.update);

        return chart
    });

1 个答案:

答案 0 :(得分:4)

我对此并不是百分之百,但是当图表的数据做了一些时髦的事情时,似乎更常出现这个问题。如果您遇到此问题,请尝试审核数据,并确保您的数据非常有意义,并且您正在使用适当的图表类型来处理您要执行的操作。