Built with blockbuilder.org
forked from sxywu's block: Selections: Data example
forked from sxywu's block: Selections: Enter example
forked from sxywu's block: Selections: Update-Exit example
forked from sxywu's block: FEM: Exercise 2
forked from sxywu's block: FEM: Exercise 2 Starter
xxxxxxxxxx
<script src="https://d3js.org/d3.v4.min.js"></script>
<style type="text/css">
/*css to go here*/
html, body {
height: 100%;
width: 100%;
}
circle {
opacity: 0.5;
}
</style>
<body></body>
<script>
// properties
var radius = 10;
var duration = 1500;
var width = 960;
var height = 500;
var margin = { top: 20, bottom: 20, left: 20, right: 20 }
var svg = d3.select('body').append('svg');
svg
.attr('height', height)
.attr('width', width)
// scales
var xScale = d3.scaleBand()
.rangeRound([margin.left, width - margin.right] );
var yScale = d3.scaleLinear()
.range([height - margin.bottom, margin.top]);
var colorScale = d3.scaleOrdinal(d3.schemeCategory10);
function update(data, year) {
data = data.filter(function(d) {
return d.year === year;
});
var t = d3.transition().duration(1000);
var circles = svg.selectAll('circle')
.data(data, function(d) {return d.key});
// Exit
circles.exit()
.transition(t)
.attr('r', 0)
.remove();
// Enter
circles.enter().append('circle')
.attr('r', 0)
.merge(circles)
// .attr('style', 'opacity: 0;')
.transition(t)
.attr('cy', d => yScale(d.yield))
.attr('fill', d => colorScale(d.gen))
.attr('cx', d => xScale(d.site) + 75)
.attr('r', radius)
.attr('style', 'opacity: .5;');
}
d3.csv('barleyfull.csv', function(err, response) {
response.forEach(function(d) {
// convert yield and year from string to int
d.year = +d.year;
d.yield = +d.yield;
// use gen and site as the unique key for each datum
d.key = d.site + ':' + d.gen;
});
// set domain on the scales
var xDomain = response.map(function(d) {return d.site});
xScale.domain(xDomain);
var yDomain = d3.extent(response, function(d) {return d.yield});
yScale.domain(yDomain);
const xAxis = d3.axisBottom()
.scale(xScale);
const yAxis = d3.axisLeft()
.scale(yScale);
svg.append('g')
.call(xAxis)
svg.append('g')
.attr('transform', `translate(${margin.left}, 0)`)
.call(yAxis)
var startYear = 1927;
var numYears = 9;
var index = 0;
// update(response, startYear);
setInterval(() => {
update(response, startYear + (index % numYears));
index += 1;
}, 2000)
});
</script>
https://d3js.org/d3.v4.min.js