Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
Javascript d3.js-条形图不会按比例显示_Javascript_Svg_Charts_D3.js_Bar Chart - Fatal编程技术网

Javascript d3.js-条形图不会按比例显示

Javascript d3.js-条形图不会按比例显示,javascript,svg,charts,d3.js,bar-chart,Javascript,Svg,Charts,D3.js,Bar Chart,我更新了代码以使用D3中的scale方法。但是,从那时起,我的条形图将不会显示。这个问题的原因是什么 var dataset = [ ]; for (var i = 0; i < 14; i++) {var newNumber = Math.round(Math.random() * 70); dataset.push(newNumber);} var svg = d3.select("body") .append("svg")

我更新了代码以使用D3中的scale方法。但是,从那时起,我的条形图将不会显示。这个问题的原因是什么

var dataset = [ ];

    for (var i = 0; i < 14; i++) {var newNumber = Math.round(Math.random() * 70);
    dataset.push(newNumber);}

var svg = d3.select("body")
            .append("svg")
            .attr("width", w)
            .attr("height", h);

    var widthScale = d3.scale.linear()
                    .domain([0,d3.max(dataset)])
                    .range([0,w]);

        svg.selectAll("rect")
            .data(dataset)
            .enter()
            .append("rect")
            .attr("x", 3)
            .attr("y", function (d,i) {return i* 36;})
            .attr("width", function(d) {return widthScale;})
            .attr("height", h / dataset.length - barPadding)
            .attr("fill", function(d) {return "rgb(0, 0, " + (d * 10) + ")";});

D3刻度只是一个函数,它将给定输入域的值转换为数据值,从0到最大值转换为图表宽度的指定输出范围。因此,您必须对数据应用比例,例如,宽度比例d。现在,您正在将widthScale函数指定给rect的宽度属性,而不是输出值


查看工作小提琴:

我看不到您在哪里设置x、y刻度。x应为d3.scale.ordinal,y应为d3.scale.linear。您是否尝试过从基本条形图模板开始?我可以通过将.attrwidth,function d{return widthScale;}更改为just.attrwidth,widthScale来修复它。谢谢@普格多