nvd3 - 重新缩放Y轴并显示异常数据点

时间:2017-06-21 20:12:43

标签: javascript d3.js plot charts nvd3.js

我正在创建一个带有NVD3的lineChart,它正在正确地绘制我的点。 Y轴的默认行为会自动缩放Y轴上的刻度。然后,当选择或取消选择系列时,Y轴会根据当前系列自动调整大小。

这有两个问题:

  1. 当调整大小时,Y轴会翻转,当Y轴向上移动时值会减小。

  2. 更重要的是 y,自动初始Y轴刻度大大低估了Y轴值,导致许多数据点(异常值)无法在视觉中显示。

  3. 我使用 Ydomain和forceY 来设置Y轴上的数据的最小值和最大值,但是我失去了功能选择或取消选择系列时的自动缩放

    我希望我的视觉保留在选择和取消选择系列时自动缩放Y轴的默认行为,但也不要提前关闭Y轴,从而显示所有异常数据点。

    非常感谢任何帮助。

    当前的JS代码:

    d3.json('..\\static\\data\\hydrograph_data.json', function(data) {  // open more dynamic file path
    
      nv.addGraph( function() {
    
        var getX = function(d) { return d.time_mili }
        var getY = function(d) { return d.value }
        var getMax = function(d) { return d.max }
    
        var min = d3.min(data, function(d) { return d3.min(d.values, getY)})
        var max = d3.max(data, function(d) { return d3.max(d.values, getMax)})
    
        var chart = nv.models.lineChart()
                      .x( getX )  // this value is stored in miliseconds since epoch (converted in data_format.py with datetime)
                      .y( getY ) 
                      .color(d3.scale.category10().range())
                      .useInteractiveGuideline(true)
                      //.yDomain([min, max])
                      .margin({left: 90})
                      // .showControls(false)
                      ;
    
        chart.xAxis
            .axisLabel(" Date ")
            .ticks(5)
            .tickFormat(function(d) {
                return d3.time.format('%y-%d-%m')(new Date(d))
            });
    
        chart.yAxis
            //.axisLabel('Discharge (cubic feet per second)')
            .ticks(5)
            .tickFormat(function(d) { return d3.format(",")(d) + " cfps"});
    
        d3.select('#hydrograph svg')
            .datum(data)
            .call(chart);
    
        //TODO: Figure out a good way to do this automatically
        nv.utils.windowResize(chart.update);
        return chart;
      });
    
    });
    

    p.s。

    我正在研究一个小提琴,但是我在小提琴中的数据样本不会产生相同的问题,因此很难在没有整个数据文件的情况下重新创建,这是我在jsfiddle中无法做到的。

    修改

    临时解决方案是在系列的开头创建一个虚拟值点,其值为0,如NatasaPeic对issue的回答所示。

0 个答案:

没有答案