javascript - 过滤我的数据导致 y 轴搞砸了

标签 javascript d3.js

我正在创建一个带有 d3 的柱形图。我有 263 个数据点,显示所有列会使图表过于拥挤。为了过滤数据点,我只需抓取每第 n 个项目(从数组的反向开始,因此我确保获得最新的数据点)。

我定义 y 轴刻度值以包括来自未过滤数据集的最小值和最大值,因此用户可以看到数据集的真实最小值和最大值。我在过滤数据之前计算最小值和最大值:

var v = new Array();
data.forEach(function (d) {
    d.date = parseDate(d.date);
    d.close = +d.close;
    v.push(d.close); // v holds ALL our values...before we filter them
});
yAxisValues = [Math.min.apply(null, v),Math.max.apply(null, v)];

if(data.length > 100){ // make it so that the chart isn't as crowded

        var len = data.length;
        var n = Math.round(len/100); // ideally, we want no more than 100 items

        var tempData = [];
        data = data.reverse();

        for( var k = 0; k < len; k += n ){

            tempData.push( data[ k ] );
        }
        data = tempData;
        data = data.reverse();
    }

但是,现在我的 y 轴搞砸了,-0.02 显示在 x 轴下方。我做错了什么?我的fiddle . (要看到 y 轴表现正常,只需注释掉我过滤数据的部分)

最佳答案

您在过滤前创建 Y 轴,但您仍在过滤数据上创建比例:

var y = d3.scale.linear().range([height - 5, 5]);
// here is where it look at the min/max of the filtered data rather than the min/max of the original
y.domain(d3.extent(data, function (d) {
    return d.close;
}));
var yAxis = d3.svg.axis().scale(y).orient('left').tickValues(yAxisValues);

如果你在过滤之前移动这部分应该没问题。

关于javascript - 过滤我的数据导致 y 轴搞砸了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15646547/

相关文章:

javascript - 使用 JavaScript 获取每个的值

javascript - 如何在D3.js中绘制JSON列表?

javascript - D3 组间空间

javascript - 如何通过添加总计和排序进行自动类型推断

javascript - 如何使用 d3js 捕获 ctrl + 单击 MacOS

javascript - 使用 jQuery 返回单击的列表项的值

java - 调用匿名 JavaScript 函数

javascript - 为什么 JQuery 要求我显式地使排队的图像淡出出队?

javascript - 当超时调用时,AngularJS Promise 不会被取消

javascript - D3 堆叠条形图