Skip to content

Instantly share code, notes, and snippets.

@nkabrown
Last active April 7, 2018 04:25
Show Gist options
  • Save nkabrown/c4a15d08861d3ab4707b to your computer and use it in GitHub Desktop.
Save nkabrown/c4a15d08861d3ab4707b to your computer and use it in GitHub Desktop.
d3 triangles
<!DOCTYPE html>
<meta charset="utf-8">
<style>
.container {
width: 90%;
}
.triangle-grid {
width: 315px;
height: 315px;
margin: 0 auto;
margin-top: 100px;
}
.triangle-box {
display: inline-block;
width: 100px;
height: 100px;
border: 0.5px solid #aaa;
margin-right: 2px;
padding: 0;
}
</style>
<div class="container">
<div class="triangle-grid"></div>
</div>
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script>
function buildGrid(data) {
const margin = {top: 10,right: 10,bottom: 10, left: 10},
width = 100 - margin.right - margin.left,
height = 100 - margin.top - margin.bottom;
const maxValue = d3.max(data, d => d.value);
const xScale = d3.scale.linear()
.domain([0, 100])
.range([0, width]);
const yScale = d3.scale.linear()
.domain([0, maxValue])
.range([height, 0]);
d3.select('.triangle-grid')
.selectAll('div')
.data(data)
.enter().append('div')
.attr('class', 'triangle-box');
d3.selectAll('.triangle-box')
.append('svg')
.attr('width', 100)
.attr('height', 100)
.append('g')
.attr('class', 'triangles')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
.append('path')
.attr('d', d => 'M ' + xScale(5) + ' ' + yScale(0) + ' L ' + xScale(88) + ' ' + yScale(5) + ' L ' + xScale(88) + ' ' + yScale(d.value) + ' Z')
.style('fill', 'rgb(222,222,222)');
d3.selectAll('.triangles')
.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
.append('path')
.attr('d', (d) => 'M ' + xScale(5) + ' ' + yScale(0) + ' L ' + xScale(88) + ' ' + yScale(5) + ' L ' + xScale(88) + ' ' + yScale(maxValue) + ' Z')
.style('fill', 'rgba(181,227,147,0.5)');
}
const values = [
{value: 66577},
{value: 52970},
{value: 34723},
{value: 44321},
{value: 31102},
{value: 66300},
{value: 23100},
{value: 44600},
{value: 55243}
];
buildGrid(values);
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment