Я перепробовал все из https://observablehq.com/@d3 / styled-axes и других уроков, но нет никаких шансов: форматирование оси x не работает, например, с .call(d3.axisBottom(x).ticks(10))
. Мой график всегда показывает каждый тик (> 100), поэтому он перекрывается. На оси абсцисс отображаются даты, например 2020-03-06. Вот мой код:
<script>
var svg = d3.select("svg"),
margin = {top: 20, right: 20, bottom: 80, left: 80},
width = +svg.attr("width") - margin.left - margin.right,
height = +svg.attr("height") - margin.top - margin.bottom;
var x = d3.scaleBand().rangeRound([0, width]).paddingInner(0.15),
y = d3.scaleLinear().rangeRound([height, 0]);
var g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");
d3.json("10.json").then(function (data) {
x.domain(data.map(function (d) { return d.TIMESTAMP; }));
y.domain([0, d3.max(data, function (d) { return Number(d.TURNOVER); })]);
g.append("g")
.attr("class", "axis axis--x")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x).ticks(10));
g.append("g")
.attr("class", "axis axis--y")
.call(d3.axisLeft(y).ticks(10));
g.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", function(d) { return x(d.TIMESTAMP); })
.attr("y", function(d) { return y(d.TURNOVER); })
.attr("width", x.bandwidth())
.attr("height", function(d) { return height - y(d.TURNOVER); });
})
.catch((error) => {
throw error;
});
</script>