反转如何绘制垂直条形图

时间:2016-02-10 09:56:55

标签: d3.js

如何反转垂直条的绘制方式? 我希望它从底部到顶部绘制。 保持数据集的正确表示非常重要

https://jsfiddle.net/adai183/ztsh1ptx/

var dataset = [ 10, 80, 5, 5];

//Create SVG element
var svg = d3.select("body")
    .append("svg")
    .attr("width", w)
    .attr("height", h);

svg.selectAll("rect")
    .data(dataset)
    .enter()
    .append("rect")
    .attr("fill", "rgb(250, 128, 114)")
    .attr("x", function(d, i) {
        return i * (w / dataset.length);
    })
    .attr("y", function(d) {
        return h - (d * 4);
    })
    .attr("width", w / dataset.length - barPadding)
    .attr("height", 0)
    .transition().duration(750).ease("linear")
    .attr("height", function(d) {
        return d * 4;
});

1 个答案:

答案 0 :(得分:3)

这样做:

    .attr("y",  function(d) {
        return h; //set y to max height
    })
    .attr("width", w / dataset.length - barPadding)
    .attr("height", 0)//height of the bars initially is 0
    .transition().duration(750).ease("linear")//on transition
    .attr("y",  function(d) {
        return d*4;//set the y to its value
    })
    .attr("height", function(d) {
        return h - (d * 4);//set the height to max height - y's value
})

工作代码here

修改

为解决这个问题,为y:

制作比例
var y = d3.scale.linear()
    .range([h, 0])
        .domain([0,100]);//since values vary between 0 and 100

现在使用此比例为条形图赋予高度。

.transition().duration(750).ease("linear")
    .attr("y",  function(d) {
        return y(d);
    })
    .attr("height", function(d) {
        return h - y(d);
})

工作示例here

希望这有帮助!