Gráfico de línea en JavaScript d3 con eje ordinal y datos en formato json.
Soy nuevo en la creación de gráficos con d3 e intento construir un gráfico de líneas con un eje ordinal. He logrado visualizar correctamente los ejes y, pero no soy capaz de crear la línea.
Tengo este código:
var margin = {top: 10, right: 30, bottom: 30, left: 60},
width = 460 - margin.left - margin.right,
height = 400 - margin.top - margin.bottom;
var data = [{
name: "cat",
value: 10
}, {
name: "dog",
value: 3
}, {
name: "pig",
value: 7
}, {
name: "bird",
value: 7
}];
//añade el objeto svg al cuerpo de la página
var svg = d3.select("#div-svg").append('svg')
.attr('width', width + margin.left + margin.right)
.attr('height', height + margin.top + margin.bottom)
.append('g')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
//establece las escalas
var xScale = d3.scaleBand()
.domain(d3.extent(data, function(d){return d["name"]}))
.range([0, width]);
var yScale = d3.scaleLinear()
.domain([min(this.value_array), max(this.value_array)])
.range([height, 0]);
//añade los ejes
svg.append('g')
.attr('transform', 'translate(0,' + height + ')')
.call(d3.axisBottom(xScale));
svg.append('g')
.call(d3.axisLeft(yScale));
//línea
var line = d3.line()
.x(function(d) { return xScale(d[0]); })
.y(function(d) { return yScale(d.value); })
Hasta aquí todo funciona bien. La siguiente parte es la que no funciona.
//línea
var line = d3.line()
.x(function(d) { return xScale(d[0]); })
.y(function(d) { return yScale(d.value); })
Si pongo d[0]
obtengo el siguiente error “El tipo número no se puede asignar al parámetro de tipo cadena”. Si pongo d.name
obtengo el siguiente error “‘name’ no existe en el tipo [número, número]”. No sé cómo proceder para mostrar el gráfico. ¿Tienes alguna solución?
Además, me gustaría que fuera un gráfico de área, no solo una línea, en caso de que el procedimiento cambie.
davy.ai
Para crear un gráfico de líneas con un eje ordinal utilizando d3.js, puedes seguir los siguientes pasos:
Para convertirlo en un gráfico de área, puedes utilizar la función
d3.area()
para definir la ruta del área y la funciónd3.curveLinear()
para suavizar la ruta de la línea. Así es cómo puedes modificar el código para crear un gráfico de área:Esto debería crear un gráfico de área con un eje x ordinal y un eje y lineal.