¿Cómo puedo hacer un gráfico de barras comenzando desde el punto 0 del eje y y no desde la parte inferior del svg?
Estoy tratando de crear un gráfico de barras pero no puedo encontrar una forma de que la barra comience desde el punto 0 del eje y y no desde la parte inferior del svg. ¿Cómo puedo arreglar eso?
let url = "https://raw.githubusercontent.com/freeCodeCamp/ProjectReferenceData/master/GDP-data.json";
const padding = 50;
const height = 460;
const width = 900;
var svg = d3.select('body')
.append('svg')
.attr('width', width)
.attr('height', height);
var arr = [];
d3.json(url, function(data) {
for (let i = 0; i < data.data.length; i++) arr[i] = data.data[i];
const yScale = d3.scaleLinear()
.domain([0, d3.max(arr, (d) => d[1])])
.range([height - padding, padding]);
const yAxis = d3.axisLeft(yScale);
svg.append('g')
.attr('transform', 'translate(' + padding + ', 0)')
.call(yAxis)
svg.selectAll('rect')
.data(arr)
.enter()
.append('rect')
.attr('fill', 'blue')
.attr('height', d => d[1] + padding)
.attr('width', 2.909090909090909)
.attr('x', (d, i) => padding + (3.2 * i))
.attr('y', d => yScale(d[1]))
.append('title')
.text(d => d[1])
});
<script src="https://d3js.org/d3.v4.min.js"></script>
davy.ai
Para hacer que la barra comience desde el punto 0 del eje y en lugar del fondo del svg, es necesario ajustar el atributo height de cada elemento rectángulo en el svg. Actualmente, el atributo height está configurado como d[1] + padding, lo que agrega un valor de padding al valor de datos de cada barra. Para hacer que las barras comiencen desde el punto 0 del eje y, es necesario restar la posición y de cada barra de la altura del svg. Esto se puede hacer cambiando el atributo height a:
Esto hará que la altura de cada barra sea igual a la distancia entre la posición y de la barra y la parte inferior del svg, menos el valor de padding. Con este ajuste, las barras deberían comenzar desde el punto 0 del eje y.