HTML and CSS:
Javascript:
//Initialize data var chartData = [ {name: "Sydney", value: 4.74, color: "#2ea4ea"}, {name: "Melbourne", value: 4.68, color: "#eb1560"}, {name: "Brisbane", value: 2.33, color: "#f78f12"}, {name: "Adelaide", value: 1.32, color: "#20c02d"}, {name: "Perth", value: 2.00, color: "#8031eb"} ]; //Select top container and create svg parent node var barWidth = 50; var heightScale = 60; var barchart = d3 .select('#barchart') .append('svg') .style('height', '330px') .selectAll('.bar') .data(chartData); //Create bar rectangles barchart .enter() .append('rect') .attr('class', 'bar') .attr('width', barWidth) .attr('height', d => { return d.value * heightScale; }) .style('fill', d => d.color) .attr('transform', (d, i) => { var x = barWidth * i + 10; var y = 310 - d.value * heightScale; return `translate(${x}, ${y})`; }); //Add bar values barchart .enter() .append('text') .attr('x', (d, i) => barWidth * i + 20) .attr('y', d => 300 - d.value * heightScale) .text(d => d.value); //Initialize legend var legendItemSize = 12; var legendSpacing = 4; var xOffset = 150; var yOffset = 100; var legend = d3 .select('#legend') .append('svg') .selectAll('.legendItem') .data(chartData); //Create legend items legend .enter() .append('rect') .attr('class', 'legendItem') .attr('width', legendItemSize) .attr('height', legendItemSize) .style('fill', d => d.color) .attr('transform', (d, i) => { var x = xOffset; var y = yOffset + (legendItemSize + legendSpacing) * i; return `translate(${x}, ${y})`; }); //Create legend labels legend .enter() .append('text') .attr('x', xOffset + legendItemSize + 5) .attr('y', (d, i) => yOffset + (legendItemSize + legendSpacing) * i + 12) .text(d => d.name);
You can try it on the JSFiddler:
https://jsfiddle.net/AndrewBuntsev/usk73eoa
For more information about D3 read this
https://d3indepth.com/
No comments:
Post a Comment