Built with blockbuilder.org
forked from mfrazie2's block: Selection & Data
forked from mfrazie2's block: Enter-Append
| license: mit |
Built with blockbuilder.org
forked from mfrazie2's block: Selection & Data
forked from mfrazie2's block: Enter-Append
| <!DOCTYPE html> | |
| <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> |