首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回NaN的D3 .bandwidth()

返回NaN的D3 .bandwidth()
EN

Stack Overflow用户
提问于 2018-08-27 11:55:11
回答 1查看 1.8K关注 0票数 1

我是d3的新手。我试图解决这个问题已经有一段时间了,但我在这里找不到任何类似的问题。

我正在尝试创建一个分组条形图(类似于https://bl.ocks.org/mbostock/3887051)。

这是我当前代码的一部分:

代码语言:javascript
复制
    var width = "100%";
    var height = "96vh";


    var canvas = d3.select("body")
                   .append('svg')
                   .attr('width',width)
                   .attr('height', height)
                   .style("border", "2px solid black");
   var y0   = d3.scaleBand()
                .paddingInner(0.1)
                .range([0, height]);    

    var y1 = d3.scaleBand()
               .padding(0.05);  

    var x = d3.scaleLinear()    
              .rangeRound([0, width]);

    var z = d3.scaleOrdinal()
            .range(["blue","green"])

    d3.csv("data.csv", data =>{
        console.log(data);

        //inner columns domain
        var keys = d3.keys(data[0]).slice(1,4); 

        x.domain(d3.extent(data, d=>d['Open rate']));
        y0.domain(data.map(d => d.Industry));
        y1.domain(keys).rangeRound([0,y0.bandwidth()]); 

        console.log(y0.bandwidth());
});

但是,最后一行console.log(y0.bandwidth())返回NaN。我还没能弄明白为什么。

我之前用过类似的scaleOrdinal,并没有遇到这个问题。

EN

回答 1

Stack Overflow用户

发布于 2018-08-27 12:11:40

我想出了答案:我忘了添加以下几行:

代码语言:javascript
复制
    var canvasWidth= parseInt(canvas.style("width"));
    var canvasHeight= parseInt(canvas.style("height"));

并将var y0= d3.scaleBand().paddingInner(0.1).range([0, height]);更改为var y0= d3.scaleBand().paddingInner(0.1).range([0, canvasHeight]);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52032372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档