d3,js在水平条形图上设置X和Y域,所有负值

时间:2017-08-15 19:26:03

标签: javascript d3.js

如何为所有负值的水平d3条形图设置x和y域?对于所有正值的条形图,域名将为:

x.domain([0, d3.max(data, function (d) {
       return Math.abs(d.value);
    })]);
  y.domain(data.map(function (d) {
        return d.dataset;
    }));

对于正值和负值的条形图,域名为:

x.domain(d3.extent(data, function (d) {
    return d.value;
}));

y.domain(data.map(function (d) {
    return d.dataset;
}));

但是当条形图具有所有负值时,我无法做到正确。

感谢您的考虑。

1 个答案:

答案 0 :(得分:0)

你正在做不正确的边缘,以及其他一些事情。

https://jsfiddle.net/fmr1x1gu/7/

var margin = {top: 30, right: 10, bottom: 50, left: 50},
    width = 500 - margin.left - margin.right,
    height = 300 - margin.top - margin.bottom;

svg.selectAll(".bar")
    .data(data)
    .enter().append("rect")
    .attr("class", function (d) {
        return "bar bar--" + (d.value < 0 ? "negative" : "positive");
    })
    .attr("x", function (d) {
        return width - x(d.value);
    })
    .attr("y", function (d) {
        return y(d.dataset);
    })
    .attr("width", function (d) {
        return x(d.value);
    })
    .attr("height", y.bandwidth());