var margin = {top: 25, right: 25, bottom: 25, left: 25}
var width = 600 - margin.left - margin.right;
var height = 200 - margin.top - margin.bottom;
// x domain
var x = d3.timeDays(new Date(2020, 00, 01), new Date(2025, 11, 01));
// x scale
var xScale = d3.scaleTime()
.domain(d3.extent(x))
.range([0, width]);
// svg
var svg = d3.select("#scale")
.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})`);
// messy x-axis
svg.append("g")
.attr("class", "x-axis")
.attr("transform", `translate(0,${height - 50})`)
.call(d3.axisBottom(xScale)
.ticks(d3.timeMonth)
);
// x-axis with rotated labels
svg.append("g")
.attr("class", "x-axis")
.attr("transform", `translate(0,0)`)
.call(d3.axisBottom(xScale)
.ticks(d3.timeMonth)
)
.selectAll("text") // YOUR CODE
.style("text-anchor", "end") // YOUR CODE
.attr("dx", "-.8em") // YOUR CODE
.attr("dy", ".15em") // YOUR CODE
.attr("transform", "rotate(-65)" ); // YOUR CODE
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.3.1/d3.min.js"></script>
<div id="scale"></div>