Когда вы устанавливаете поля на 0
график соответствует росту и ширине тела.Проблема в метках и галочках оси:
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(xScale));
Вы перемещаете ось под графиком.Если бы я был тобой, я бы изменил поля на минимальное значение, которое позволяет пометить метки осей и метки на странице.В качестве альтернативы вы можете попытаться изменить ширину и высоту графика в зависимости от размера осей, но я ожидаю, что это будет болезненно и не стоит усилий.
Так что я бы просто:
margin = {
top: 10,
right: 35,
bottom: 20,
left: 30
}
Есть и другое решение - измените метки осей и разместите их внутри графика - тогда вы можете изменить поля на 0
и при этом иметь описание видимым.