- Attributes/Styles
- Classes
- Link/Href
- Properties
- Axis
- Time parsing/formatting
- Color
- General Update Pattern
- Transition
var svgWrapper = d3.select("body") .append("svg") .attr("id", "viz") .attr("width", width + margin.left + margin.right) .attr("height", height + margin.top + margin.bottom); var container = svgWrapper.append("g") .attr("transform", "translate(" + margin.left + "," + margin.top + ")") .style("pointer-events", "all");selection.attr("r", style.r) .attr("fill", style.fill) .attr("stroke", style.color) .attr("stroke-width", style["stroke-width"])selection.classed('my-class', true);selection.select('text') .text(function(d) { return d.name; }) .attr("xlink:href", function(d){ return d.url;});selection .append('a') .attr('href', function(d) { return d.url; }) .text(function(d) { return d.name; });var id = d3.select("#id").property("value"); d3.select("input").property("value", d3.event.keyCode);var xAxis = d3.svg.axis() .scale(_xScale) .orient("bottom") .ticks(4) .tickFormat(d3.time.format('%d %b %I%p')) //14 Feb 12AM .tickSize(5);var parseDate = d3.time.format("%Y-%m-%dT%H:%M:%SZ").parse, formatDate = d3.time.format("%d %b %H:%M:%S"), formatDateForQuery = d3.time.format("%Y-%m-%dT%H:%M:%SZ"), formatTime = d3.time.format("%H:%M:%S");var myCategory20Colors = [ 0x1f77b4, 0xaec7e8, 0xff7f0e, 0xffbb78, 0x2ca02c, 0x98df8a, 0xd62728, 0xff9896, 0x9467bd, 0xc5b0d5, 0x8c564b, 0xc49c94, 0xe377c2, 0xf7b6d2, 0xbcbd22, 0xdbdb8d, 0x17becf, 0x9edae5 ].map(function(x) { var value = x + ""; return d3.rgb(value >> 16, value >> 8 & 0xff, value & 0xff).toString(); }); var myCategory20 = d3.scale.ordinal().range(myCategory20Colors); console.log(myCategory20("x"), myCategory20("y")); // #1f77b4 #aec7e8function update(data) { // DATA JOIN // Join new data with old elements, if any. var text = svg.selectAll("text") .data(data); // UPDATE // Update old elements as needed. text.attr("class", "update"); // ENTER // Create new elements as needed. text.enter().append("text") .attr("class", "enter") .attr("x", function(d, i) { return i * 32; }) .attr("dy", ".35em"); // ENTER + UPDATE // Appending to the enter selection expands the update selection to include // entering elements; so, operations on the update selection after appending to // the enter selection will apply to both entering and updating nodes. text.text(function(d) { return d; }); // EXIT // Remove old elements as needed. text.exit().remove(); }function endall(transition, callback) { if (transition.size() === 0) { callback() } var n = 0; transition .each(function() { ++n; }) .each("end", function() { if (!--n) callback.apply(this, arguments); }); } selection.transition() .attr("cx", xMap) .attr("cy", yMap) .call(endall, function() { console.log("all loaded"); // do your next transition });MIT