D3.js Stacked Bar Chart, from vertical to horizontal

前端 未结 1 471
被撕碎了的回忆
被撕碎了的回忆 2020-12-10 08:34

I like to make this vertical Bar Chart (http://bl.ocks.org/mbostock/3886208) to a horizontal Bar Chart.

Thanks for your help!

Code examples would be nice.

相关标签:
1条回答
  • 2020-12-10 09:04

    It's just a matter of reversing the domains, axis and then the rect calculations:

    var y = d3.scale.ordinal()
        .rangeRoundBands([height, 0], .1); // y becomes ordinal
    
    var x = d3.scale.linear()
        .rangeRound([0, width]); // x becomes linear
    
    // change state group to be positioned in the y now instead of x
    var state = svg.selectAll(".state")
          .data(data)
          .enter().append("g")
          .attr("class", "g")
          .attr("transform", function(d) { return "translate(0," + y(d.State) + ")"; });
    
    // rect calculations become
     state.selectAll("rect")
        .data(function(d) { return d.ages; })
        .enter().append("rect")
        .attr("height", y.rangeBand()) // height in now the rangeband
        .attr("x", function(d) { return x(d.y0); }) // this is the horizontal position in the stack
        .attr("width", function(d) { return x(d.y1) - x(d.y0); }) // this is the horizontal "height" of the bar
        .style("fill", function(d) { return color(d.name); });
    

    Here's the full working example.

    0 讨论(0)
提交回复
热议问题