【问题标题】:D3 why d3.histogram array is emptyD3 为什么 d3.histogram 数组为空
【发布时间】:2018-02-02 16:09:39
【问题描述】:

这可能是一个简单的问题,但是为什么当我尝试将数据分配给d3.histogram 生成器时,我有 0 长度值数组? 代码:

const data = [8,10,16];
const max = 16;
const binCount = data.length;
const width = 100;
const height = 100;

const scaleX = d3.scaleLinear()
    .domain([0, binCount])
    .range([0, width]);

const scaleY = d3.scaleLinear()
    .domain([0, max])
    .range([0, height]);

const bins = d3.histogram()
    .domain(scaleX.domain())
    (data);
    
console.log(bins);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>

【问题讨论】:

  • 如果您查看实际的控制台日志 (ctrl + shift + i) 并展开树分支,您会发现它实际上不是空的

标签: d3.js histogram


【解决方案1】:

直方图的比例域必须是[0, biggest number in your data],而不是[0, number of items in your data]

目前它忽略了任何大于 3 的值(基本上是所有数据点)

https://github.com/d3/d3-array/blob/master/README.md#histogram_domain

"直方图域定义为数组[min,max],其中min是最小可观察值,max是最大可观察值;两个值都包括在内。任何超出该域的值都将被忽略什么时候生成直方图。”

const data = [8,10,16];
const max = 16;
const binCount = data.length;
const width = 100;
const height = 100;

const scaleX = d3.scaleLinear()
    .domain([0, d3.max(data)])
    .range([0, width]);

const scaleY = d3.scaleLinear()
    .domain([0, max])
    .range([0, height]);

const bins = d3.histogram()
    .domain(scaleX.domain())
    (data);
    
console.log(bins);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js"></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2016-08-21
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多