web-dev-qa-db-fra.com

"Interpoler" n'est pas une fonction

Je suis nouveau sur D3 et j'expérimente sur quelques cartes. Lors de la création d'un graphique en courbes à l'aide de D3 V4, je suis tombé sur les erreurs suivantes.

d3.line (...). x (...). y (...). interpoler n'est pas une fonction

Je suppose que cette erreur est due au fait que l'interpolation de fonction n'est pas disponible dans D3 v4. Ce serait formidable si quelqu'un pouvait m'aider avec la fonction de remplacement de la fonction d'interpolation.

Mon code est dans le lien ci-dessous

https://ghostbin.com/paste/ztans

20
Amogh Huilgol

Dans D3 v4.x, le générateur de lignes prend une courbe pour définir l'interpolation:

Alors que les lignes sont définies comme une séquence de points [x, y] bidimensionnels et que les zones sont définies de manière similaire par une ligne du dessus et une ligne de base, il reste à transformer cette représentation discrète en une forme continue: c'est-à-dire, comment interpoler entre les points. Une variété de courbes sont fournies à cet effet [...] Les courbes ne sont généralement pas construites ou utilisées directement, au lieu d'être transmises à ligne. Curve et zone. courbe . (souligne le mien)

Donc ça:

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

Devrait être:

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

Voici votre code avec ce changement:

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>
41
Gerardo Furtado