Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
D3.js d3高度函数返回NaN_D3.js - Fatal编程技术网

D3.js d3高度函数返回NaN

D3.js d3高度函数返回NaN,d3.js,D3.js,我是d3.js新手,在尝试运行以下代码时收到一个错误:error:attribute height:Expected length,NaN: 我知道错误正在发生 .attr('height', function(d){ return (d * 5); }) 但我似乎无法解决它。感谢您的帮助 var data = []; for(let i = 0; i < 20; i++){ // let num = Math.floor( Math.random

我是d3.js新手,在尝试运行以下代码时收到一个错误:error:attribute height:Expected length,NaN:

我知道错误正在发生

   .attr('height', function(d){
        return (d * 5);
    })
但我似乎无法解决它。感谢您的帮助

var data = [];

for(let i = 0; i < 20; i++){
    // let num = Math.floor( Math.random() * 50 );
    let num = d3.randomUniform(1, 50);
    data.push(num);
}
// create svg element
var chartWidth = 800;
var chartHeight = 400;
var barPadding = 5;

var svg = d3.select('#chart')
            .append('svg')
            .attr('width', chartWidth)
            .attr('height', chartHeight);

// bind data and create bars
svg.selectAll('rect')
    .data(data)
    .enter()
    .append('rect')
    .attr('x', function(d, i){
        return i * (chartWidth / data.length);
    })
    .attr('y', 0)
    .attr('width', (chartWidth / data.length - barPadding))
    .attr('height', function(d){
        return (d * 5);
    })
    .attr('fill', '#7ED26D');

如果我们查看d3.randomUniform的文档,我们会看到它返回一个函数,用于生成均匀分布的随机数。如果我们在高度函数中记录d,我们会看到d是一个函数。这是因为我们正在获取d3.randomUniform返回的函数,并将其添加到for循环中的数组中

因此,我们只需要执行该函数:

let num = d3.randomUniform(1, 50)();
但是有一个更好的方法,因为我们不需要在循环的每次迭代中创建这个函数。相反,我们可以使用:

let num = d3.randomUniform(1, 50);
for(let i = 0; i < 20; i++){
    data.push(num());
}
var数据=[]; 设num=d3.1或m1,50; forlet i=0;i<20;我++{ data.pushnum; } //创建svg元素 var-chartWidth=800; var chartHeight=400; var=5; var svg=d3。选择“图表” .append'svg' .attr'width',chartWidth .attr'height',chartHeight; //绑定数据并创建条 svg.selectAll'rect' .数据 进来 .append'rect' .attr'x',函数d,i{ 返回i*chartWidth/data.length; } .attr'y',0 .attr'width',chartWidth/data.length-条形填充 .attr'height',函数d{ 返回d*5; } .attr'fill'、'7ED26D';
如果我们查看d3.randomUniform的文档,我们会看到它返回一个函数,用于生成均匀分布的随机数。如果我们在高度函数中记录d,我们会看到d是一个函数。这是因为我们正在获取d3.randomUniform返回的函数,并将其添加到for循环中的数组中

因此,我们只需要执行该函数:

let num = d3.randomUniform(1, 50)();
但是有一个更好的方法,因为我们不需要在循环的每次迭代中创建这个函数。相反,我们可以使用:

let num = d3.randomUniform(1, 50);
for(let i = 0; i < 20; i++){
    data.push(num());
}
var数据=[]; 设num=d3.1或m1,50; forlet i=0;i<20;我++{ data.pushnum; } //创建svg元素 var-chartWidth=800; var chartHeight=400; var=5; var svg=d3。选择“图表” .append'svg' .attr'width',chartWidth .attr'height',chartHeight; //绑定数据并创建条 svg.selectAll'rect' .数据 进来 .append'rect' .attr'x',函数d,i{ 返回i*chartWidth/data.length; } .attr'y',0 .attr'width',chartWidth/data.length-条形填充 .attr'height',函数d{ 返回d*5; } .attr'fill'、'7ED26D';
哇,不知道我怎么错过了。非常感谢。哇,不知道我怎么错过了。非常感谢。