我正在创建一个带有NVD3的lineChart,它正在正确地绘制我的点。 Y轴的默认行为会自动缩放Y轴上的刻度。然后,当选择或取消选择系列时,Y轴会根据当前系列自动调整大小。
这有两个问题:
当调整大小时,Y轴会翻转,当Y轴向上移动时值会减小。
更重要的是 y,自动初始Y轴刻度大大低估了Y轴值,导致许多数据点(异常值)无法在视觉中显示。
我使用 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的回答所示。