d3.js - evenly spaced bars on a time scale

后端 未结 3 1360

I\'m building a bar plot in d3.js in which each bar represents total TB cases during a month. The data essentially consists of a date (initially strings in %Y-%m format, bu

3条回答
  •  清酒与你
    2021-01-03 21:14

    You can combine ordinal and time scales:

    // Use this to draw x axis
    var xScaleDate = d3.time.scale()
        .domain(d3.extent(thisstat, function(d) { return d.date; }))
        .range([0, width - margin.left - margin.right]);
    
    // Add an ordinal scale
    var ordinalXScale = d3.scale.ordinal()
        .domain(d3.map(thisstat, function(d) { return d.date; }))
        .rangeBands([0, width], 0.4, 0);
    
    // Now you can use both of them to space columns evenly:
    columnGroup.enter()
        .append("rect")
        .attr("class", "column")
        .attr("width", ordinalXScale.rangeBand())
        .attr("height", function (d) {
            return height - yScale(d.value);
        })
        .attr("x", function (d) {
            return xScaleDate(d.date);
        })
        .attr("y", function (d){
            return yScale(d.value);
        });
    

    I've created an example a while ago to demonstrate this approach: http://codepen.io/coquin/pen/BNpQoO

提交回复
热议问题