invertidas - composicion de funciones javascript
"Interpolar" no es una funciĆ³n (1)
En D3 v4.x, el generador de líneas toma una curve para definir la interpolación:
Si bien las líneas se definen como una secuencia de puntos [x, y] bidimensionales, y las áreas se definen de manera similar mediante una línea de base y una línea de base, queda la tarea de transformar esta representación discreta en una forma continua: es decir, cómo interpolar entre los puntos. Se proporciona una variedad de curvas para este propósito [...] Las curvas generalmente no se construyen ni se usan directamente, sino que se pasan a la línea .curva y área .curva . (énfasis mío)
Así que esto:
var lineFun = d3.line()
.x(function(d){return d.month*50})
.y(function(d){return height - (10* d.Sales)})
.interpolate("basis")
Debiera ser:
var lineFun = d3.line()
.x(function(d){return d.month*50})
.y(function(d){return height - (10* d.Sales)})
.curve(d3.curveBasis);
Aquí está tu código con ese cambio:
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>
Esta pregunta ya tiene una respuesta aquí:
- Error con interpolar 1 respuesta
Soy nuevo en D3 y estoy experimentando en pocos gráficos. Mientras construía un gráfico de líneas usando D3 V4, encontré los siguientes errores.
d3.line (...). x (...). y (...). interpolar no es una función
Supongo que este error se debe a que la función de interpolar no está disponible en D3 v4. Sería genial si alguien pudiera ayudarme con la función de reemplazo para la función de interpolar.
Mi código está en el siguiente enlace