“Interpolate” is not a function

前端 未结 1 1409
情话喂你
情话喂你 2020-12-10 11:07

I am new to D3 and experimenting on few charts . While building a line chart using D3 V4 , I came across following errors .

d3.line(...).x(...).y(...

相关标签:
1条回答
  • 2020-12-10 11:24

    In D3 v4.x, the line generator takes a curve to define the interpolation:

    While lines are defined as a sequence of two-dimensional [x, y] points, and areas are similarly defined by a topline and a baseline, there remains the task of transforming this discrete representation into a continuous shape: i.e., how to interpolate between the points. A variety of curves are provided for this purpose [...] Curves are typically not constructed or used directly, instead being passed to line.curve and area.curve. (emphases mine)

    So, this:

    var lineFun = d3.line()
        .x(function(d){return d.month*50})
        .y(function(d){return height - (10* d.Sales)})
        .interpolate("basis")
    

    Should be:

    var lineFun = d3.line()
        .x(function(d){return d.month*50})
        .y(function(d){return height - (10* d.Sales)})
        .curve(d3.curveBasis);
    

    Here is your code with that change:

    var w = 700;
    var height = 300;
    var padding = 2;
    var border = 2
    
    var dataset=[5,7,2,6,1,10,8,9,11,13,16,40,15,20,25,35,36,25,28,18,17,4,22,5,3,35,46,57];
    
    var monthlySales =[
        {
            "month":1,
            "Sales":10
        },
        {
            "month":2,
            "Sales":25
        },
        {
            "month":3,
            "Sales":12
        },
        {
            "month":4,
            "Sales":16
        },
        {
            "month":5,
            "Sales":17
        }
        ];
    
    onload();
    
    function onload(){
    
        var svg = d3.select("body")
                    .append("svg")
                    .attr("width",w)
                    .attr("height",height)
    
        svg.selectAll("rect")
            .data(dataset)
            .enter()
            .append("rect")
            .attrs({
                x : function(d,i){
                    return (i * (w/dataset.length)); },
                y : function(d){ return (height- (d*4))},
                width: (w/dataset.length)-padding,
                height:function(d){ return(d*4); },
                fill : function(d){return "rgb(0,"+(d*10)+",0)" ;}
            });
    
        svg.selectAll("text")
            .data(dataset)
            .enter()
            .append("text")
            .text(function(d){ return d})
            .attrs({
    
                x: function(d,i){ return (i * (w/dataset.length)) + ((((w/dataset.length) - padding)/2))},
                y: function(d) {return (height-(d*4))},
                "text-anchor" : "middle"
            })
    
    
        var lineFun = d3.line()
            .x(function(d){return d.month*50})
            .y(function(d){return height - (10* d.Sales)})
            .curve(d3.curveBasis);
    
    
        var svgLine = d3.select("body").append("svg")
            .attr("width",w)
            .attr("height",height);
    
        var svgPath = svgLine.append("path")
            .attrs({
                d: lineFun(monthlySales),
                "stroke": "purple",
                "stroke-width":2,
                "fill" :"none"
            })
    
        svgLine.selectAll("text")
            .data(monthlySales)
            .enter()
            .append("text")
            .text(function(d){return d.Sales})
            .attrs({
                x : function(d){return d.month*50 - 10},
                y : function(d){return height-(10*d.Sales) + 10},
                "font-size":"12px",
                "fill" : "#666666",
                "font-family":"sans-serif",
                "dx":".35em",
                "text-anchor":"start",
                "font-weight": function(d,i){
                    if(i==0 || i == monthlySales.length-1){
                        return "bold"
                    }
                    else{
                        return "normal"
                    }
                }
            })
    
    
    
    }
    <script src="https://d3js.org/d3.v4.min.js"></script>
    <script src="https://d3js.org/d3-selection-multi.v1.min.js"></script>

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