topical media & game development
mobile-data-circle-08.htm / htm
<script src="http://d3js.org/d3.v3.min.js"></script>
<link rel="stylesheet" type="text/css" href="mobile-data-circle-style-d3.css">
<script type="text/javascript">
data
var data = [32, 57, 112],
dataEnter = data.concat(293),
dataExit = data.slice(0, 2),
w = 360,
h = 180,
x = d3.scale.ordinal().domain([57, 32, 112]).rangePoints([0, w], 1),
y = d3.scale.ordinal().domain(data).rangePoints([0, h], 2);
</script>
<p>Using the enter selection, we can create new circles for any missing data. Each new circle is already bound to the data, so we can use data to compute attributes and styles:</p>
<div class="chart" id="chart-8">
<pre class="code">var enter = circle.enter().append("circle");
enter.attr("cy", 90);
enter.attr("cx", 160);
enter.attr("r", function(d) {
return Math.sqrt(d);
});
</pre>
<button>run</button>
<!--
<svg width="360" height="180"><g transform="translate(180,45)"><circle class="little" r="12"></circle><text dy=".35em" text-anchor="middle">32</text></g><g transform="translate(60,90)"><circle class="little" r="12"></circle><text dy=".35em" text-anchor="middle">57</text></g><g transform="translate(300,135)"><circle class="little" r="12"></circle><text dy=".35em" text-anchor="middle">112</text></g><g class="data" transform="translate(20,20)"></g><g class="data" transform="translate(40,20)"></g><g class="data" transform="translate(60,20)"></g><g class="data" transform="translate(80,20)"><circle class="little" r="0.000001"></circle><rect x="-10" y="-10" width="20" height="20" style="fill: #90ee90; stroke: #008000;"></rect><text dy=".35em" text-anchor="middle">293</text></g></svg>
-->
</div>
<script type="text/javascript">
script
(function() {
var svg = d3.select("#chart-8").append("svg")
.attr("width", w)
.attr("height", h);
var g = svg.selectAll("g")
.data(data)
.enter().append("g")
.attr("transform", function(d) { return "translate(" + x(d) + "," + y(d) + ")"; });
g.append("circle")
.attr("class", "little")
.attr("r", 12);
g.append("text")
.attr("dy", ".35em")
.attr("text-anchor", "middle")
.text(String);
enter
var g = svg.selectAll(".data")
.data(dataEnter)
.enter().append("g")
.attr("class", "data")
.attr("transform", function(d, i) { return "translate(" + 20 * (i + 1) + ",20)"; })
.filter(function(d, i) { return i == 3; });
append
g.append("circle")
.attr("class", "little")
.attr("r", 1e-6);
g.append("rect")
.attr("x", -10)
.attr("y", -10)
.attr("width", 20)
.attr("height", 20)
.style("fill", "lightgreen")
.style("stroke", "green");
g.append("text")
.attr("dy", ".35em")
.attr("text-anchor", "middle")
.text(String);
button
d3.select("#chart-8 button").on("click", function() {
g.attr("transform", "translate(80,20)");
g.select("circle").attr("r", 1e-6);
g.select("rect").style("opacity", 1);
var t = g.transition().duration(750);
t.attr("transform", "translate(160,100)");
t.select("circle").attr("r", Math.sqrt);
t.select("rect").style("opacity", 1e-6);
});
})();
</script>
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2780434-1";
urchinTracker();
</script>