javascript - D3 .bandwidth() 返回 NaN

标签 javascript d3.js

我是 d3 的新手。一段时间以来,我一直在尝试解决这个问题,但在这里找不到任何类似的问题。

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

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

    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,没有遇到这个问题。

最佳答案

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

    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]);

关于javascript - D3 .bandwidth() 返回 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52032372/

相关文章:

javascript - Coldfusion 结合链接的 JavaScript 文件

javascript - jQuery 函数有时在 AJAX 请求完成后重定向,有时保留在页面上?

javascript - D3js/Javascript 与 Dart

javascript - 根据数据点的数量更改 d3 可重复使用的圆环图中的颜色范围

javascript - 图表不反射(reflect)事件条目,除非我在标记中将其设置为 array.slice() - 这将禁用选择点 - Stackblitz inside

javascript - 如何使用 Javascript 处理 err_blocked_by_client?

javascript - onclick 按钮,我希望按钮被着色并存储一个值

javascript - 如何使用jquery更改动态内容的类名

javascript - D3 折线图出现错误且未绘制

javascript - D3 防止双击缩放