Evan Savaria
Three New Things that I learned:
1. I learned how to use transitions to create visual effects.
2. 2. I learned how to use Axes for use with scatterplots.
3. 3. Lastly I learned how create useful functions for organizing data visually.
Built with blockbuilder.org
xxxxxxxxxx
<head>
<meta charset="utf-8">
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
<style type="text/css">
.axis path,
.axis line {
fill: none;
stroke: black;
shape-rendering: crispEdges;
}
.axis text {
font-family: sans-serif;
font-size: 11px;
}
button {position:absolute;top:10px;left:400px;}
</style>
</head>
<body>
<div class ="Murray"></div>
<div class="startrans"><button type="button"onclick="run();">Transition</button></div>
<script>
var svg = d3.select(".Murray")
//Width and height
var w = 500;
var h = 300;
var padding = 30;
//Dynamic, random dataset
var dataset = []; //Initialize empty array
var numDataPoints = 50; //Number of dummy data points to create
var xRange = Math.random() * 1000; //Max range of new x values
var yRange = Math.random() * 1000; //Max range of new y values
for (var i = 0; i < numDataPoints; i++) { //Loop numDataPoints times
var newNumber1 = Math.round(Math.random() * xRange); //New random integer
var newNumber2 = Math.round(Math.random() * yRange); //New random integer
dataset.push([newNumber1, newNumber2]); //Add new number to array
}
//Create scale functions
var xScale = d3.scale.linear()
.domain([0, d3.max(dataset, function(d) { return d[0]; })])
.range([padding, w - padding * 2]);
var yScale = d3.scale.linear()
.domain([0, d3.max(dataset, function(d) { return d[1]; })])
.range([h - padding, padding]);
var rScale = d3.scale.linear()
.domain([0, d3.max(dataset, function(d) { return d[1]; })])
.range([2, 5]);
//Define X axis
var xAxis = d3.svg.axis()
.scale(xScale)
.orient("bottom")
.ticks(5);
//Define Y axis
var yAxis = d3.svg.axis()
.scale(yScale)
.orient("left")
.ticks(5);
//Create SVG element
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
//Create circles
svg.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.attr("cx", function(d) {
return xScale(d[0]);
})
.attr("cy", function(d) {
return yScale(d[1]);
})
.attr("r", function(d) {
return rScale(d[1]);
});
//Create X axis
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(0," + (h - padding) + ")")
.call(xAxis);
//Create Y axis
svg.append("g")
.attr("class", "axis")
.attr("transform", "translate(" + padding + ",0)")
.call(yAxis);
var svg = d3.select(".startrans").append("svg").attr("width", 500).attr("height", 200);
var star = svg.append("path").attr("transform", "translate(60,120)rotate(0)").style("stroke", "blue").style("fill", "none").attr("d", "m 0,-60 l 20,40 l 40,20 l -40,20 l -20,40 l -20,-40 l -40,-20 l 40,-20 z");
function run() {
var button = d3.select("button");
if(button.text() =="Transition") {
star.style("fill", "white").transition().duration(1000).style("fill", "blue").attr("transform", "translate(440,120)rotate(180)").attr("d", "m 0,-60 l 40,20 l 20,40 l -20,40 l -40,20 l -40,-20 l -20,-40 l 20,-40 z").each("end",function() {
svg.append("circle").attr("cx", 440).attr("cy", 120).attr("r",250).style("fill", "green").style("opacity", "0").transition().duration(700).attr("r",0).style("fill", "yellow").style("opacity",1).remove();});
d3.select("button").text("Reset");
}
else {
d3.select("button").text("Transition");
star.transition().duration(1000).attr("transform", "translate(100,120)rotate(0)").style("stroke", "blue").style("fill", "none")
.attr("d", "m 0,-60 l 20,40 l 40,20 l -40,20 l -20,40 l -20,-40 l -40,-20 l 40,-20 z");
}
};
</script>
</body>
https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js