【问题标题】:d3 data scaling issued3 数据缩放问题
【发布时间】:2015-12-01 15:47:00
【问题描述】:

过了一会儿,我终于想出了如何在 d3 线性中缩放数据。 但是,如果您查看以下屏幕截图,您可能会注意到数字似乎没有适当地缩放: 所以:例如4.55 和 16.2 的长度几乎相同,它们不应该是这样的(当我在 0 和 565 之间缩放时,4 也应该更靠近左侧)

这就是我创建线性比例的方式:

var scaledData = d3.scale.linear()
                      .domain(d3.extent(data, function(d){return d.Betrag;})) 
                      .range([0, width-35]);

这就是我绘制横条的方式:

var bar = chart.selectAll("g")
      .data(data)
    .enter().append("g")
      .attr("transform", function(d, i) { return "translate(0," + i * barHeight + ")"; });

  bar.append("rect")
    .attr("width", function(d) { return scaledData(Math.abs(Math.round(d.Betrag))); })
    .attr("height", barHeight - 1);

  bar.append("text")
    .attr("x",function(d) { return scaledData(Math.abs(Math.round(d.Betrag)))+3; })
    .attr("y", barHeight / 2)
    .attr("dy", ".35em")
    .text(function(d) { return Math.abs(d.Betrag); });
  });

我在这部分 scaledData(Math.abs(Math.round(d.Betrag))) 上尝试过不同的事情,但无论我做什么,它都没有做我认为应该做的事情......也许作为一个新手,我仍然不完全理解天平的事情...... .我认为问题出在我如何设置域。如果我将 d3.extend 函数替换为[0,2000],那就太好了……

【问题讨论】:

    标签: javascript d3.js scale


    【解决方案1】:

    您必须显示您的数据才能确定,但​​我认为您的数据中有负值,因此您的域看起来大约是 [-600, 1800]。但是,当您计算宽度时,您首先获取数据的绝对值,因此您的最低可能值为 0。解决方案在您的 d3.extent 访问器函数中,以评估数据的绝对值(如果这实际上是您想要的)。

    【讨论】:

    • 完美。是的,这就是我在这种情况下想要的(目前 - 仍处于实验阶段)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2019-12-30
    • 2013-09-03
    • 2019-08-05
    • 2021-04-07
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多