Built with blockbuilder.org
forked from mfrazie2's block: Selection & Data
forked from mfrazie2's block: Enter-Append
xxxxxxxxxx
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<style>
body { margin:0;position:fixed;top:0;right:0;bottom:0;left:0; }
svg { width: 100%;height:100%}
</style>
</head>
<body>
<svg></svg>
<script>
const data = [100,120,53,74,95, 42, 87, 35, 150];
const rectWidth = 40,
height = 150;
const svg = d3.select('svg')
.attr('transform', 'translate(40,20)');
// const extent = d3.extent(data);
const yScale = d3.scaleLinear()
.domain([height,0])
.range([0,150]);
const yAxis = d3.axisLeft()
.scale(yScale);
svg.append('g')
.attr('transform', `translate(40, 0)`)
.call(yAxis)
// console.log(extent);
const xScale = d3.scaleLinear()
.domain([0, data.length])
.range([0,rectWidth * data.length]);
const xAxis = d3.axisBottom()
.scale(xScale);
svg.append('g')
.attr('transform', 'translate(40, 150)')
.call(xAxis);
const enter = svg.selectAll('rect')
.data(data)
.enter().append('rect')
.attr('x', (d,i) => i * rectWidth)
.attr('y', d => height - d)
.attr('width', rectWidth)
.attr('height', d => d)
.attr('fill', 'blue')
.attr('stroke', 'white')
.attr('transform', 'translate(40,1)');
// console.log(enter.nodes());
// console.log(enter.data());
// d3.scaleLinear()
// .domain([min, max]) // input
// .range([min, max]); // output
// map (0,100) to (0,1) :: domain to range
</script>
</body>
https://d3js.org/d3.v4.min.js