为什么条形D3之间没有间隙

时间:2016-10-06 10:10:38

标签: javascript d3.js

我正在学习d3 js。我找到了一本关于图书馆的好书。但我需要将代码示例从版本3翻译为4。 这是我在第4版的代码

<body>
        <script type="text/javascript">
            var width = 800;
            var height = 500;            
            var dataset  = [];                    

            dataset = [ 5, 10, 13, 19, 21, 25, 22, 18, 15, 13,
                           11, 12, 15, 20, 18, 17, 16, 18, 23, 25 ];


            var xScale = d3.scaleBand()
                            .domain(d3.range(dataset.length))
                            .rangeRound([0, width], 0.5);

            var yScale = d3.scaleLinear()
                            .domain([0, d3.max(dataset)])
                            .range([0, height]);

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

            svg.selectAll("rect")
                .data(dataset)
                .enter()
                .append("rect")               
                .attr("x", function(d, i){return xScale(i);})
                .attr("y", function(d){return height- yScale(d);})
                .attr("width", xScale.bandwidth())
                .attr("height", function(d){return yScale(d);})
                .attr("fill",  function(d){return "rgb(0,0,"+d*10+")";});

            svg.selectAll("text")
                .data(dataset)
                .enter()
                .append("text")      
                .text(function(d){return d;})     
                .attr("text-anchor", "middle")             
                .attr("x", function(d, i){return xScale(i) + xScale.bandwidth() / 2;})
                .attr("y", function(d){return height - yScale(d) + 14;})                
                .attr("fill", "white");             

        </script>
    </body>

以下是结果enter image description here

据我了解,这个

     .rangeRound([0, width], 0.5);

应该在酒吧之间留下一些空白。但是,我不知道为什么 - 没有差距! 我做错了什么?

1 个答案:

答案 0 :(得分:3)

我相信d3 v4中的新模式是 -

var xScale = d3.scaleBand()
      .domain(d3.range(dataset.length))
      .rangeRound([0, width])
      .paddingInner(0.05);