一个变量在一个位置被设置为Nan,但在另一个位置被正确设置为Nan

a variable is being set as Nan at one place, but correctly at another location

本文关键字:位置 设置 Nan 一个 另一个 变量      更新时间:2023-09-26

在下面的代码中,我试图读取包含名称和值对的tsv文件,使用d3.js绘制条形图。

在执行下面的代码之前,我已经设置了y = d3.scale.linear.range()。

为什么当我设置时,rect.attr('y',height - barHeight); y被设置为NaN,而这里var rect = bar.append('rect') .attr('width', barWidth-1) .attr('height', barHeight);矩形高度被正确设置?

在此函数之前我已经设置了高度和宽度值。它们不是未定义的

问题是计算height - barHeight,如果我只是给它作为.attr('y',barHeight);,它是设置矩形的y属性。

var svg = d3.select('svg');

var width = 960;
var height = 500;
svg.attr('height', height)
        .attr('width', width);
var y = d3.scale.linear()
            .range([0,500]);
d3.tsv("./src/src.tsv", typeCast,
function (error, array)
    {
        y.domain([0, d3.max(array, function (d){
            return d.value;
        })]);
        var barWidth = width / array.length;
        var barHeight = function (d)
        {
            console.log(y(d.value));
            return y(d.value);
        }

        var bar = svg.selectAll('g')
            .data(array)
            .enter()
            .append('g')
            .attr('transform', function (d, i){
                return "translate("+i * barWidth+")";
            });

        var rect = bar.append('rect')
            .attr('width', barWidth-1)
            .attr('height', barHeight);
        rect.attr('y', height - barHeight);

    }
    );

请帮我设置矩形的y属性

这是因为您的barHeight是一个函数。

var barHeight = function (d) 

当像.attr('height', barHeight)一样使用它时,它会给出正确的值,因为.attr()接受一个函数作为第二个参数,该函数将被执行并返回值。

第二种用法应该是

rect.attr('y', function(d) { return height - barHeight(d); });

高度变量没有定义,所以height - barHeightundefined - Number,也就是NaN。正确设置变量height