var margin = { top: 100, right: 300, bottom: 50, left: 70 }, outerWidth = 1000, outerHeight =500, width = outerWidth - margin.left - margin.right, height = outerHeight - margin.top - margin.bottom; var x = d3.scale.linear() .range([0, width]).nice(); var y = d3.scale.linear() .range([height, 0]).nice(); var xCat = "tsne_x", yCat = "tsne_y", rCat = "paragraphs", colorCat = "robo_group_names"; d3.csv("tsne_data_attempt7.csv", function(data) { data.forEach(function(d) { d.tsne_x = +d.tsne_x; d.paragraphs = +d.paragraphs; d.tsne_y = +d.tsne_y; d.url = d.url; d.title = d.title; d.sponsor = d.sponsor; d.key_words = d.key_words; }); var xMax = d3.max(data, function(d) { return d[xCat]; }) * 1.05, xMin = d3.min(data, function(d) { return d[xCat]; }), xMin = xMin > 0 ? 0 : xMin, yMax = d3.max(data, function(d) { return d[yCat]; }) * 1.05, yMin = d3.min(data, function(d) { return d[yCat]; }), yMin = yMin > 0 ? 0 : yMin; x.domain([xMin, xMax]); y.domain([yMin, yMax]); var xAxis = d3.svg.axis() .scale(x) .orient("bottom") .tickSize(-height) .tickFormat(""); var yAxis = d3.svg.axis() .scale(y) .orient("left") .tickSize(-width) .tickFormat(""); var color = d3.scale.category20(); var tip = d3.tip() .attr("class", "d3-tip") .offset([-10, 0]) .html(function(d) { return '' + d.title +"" + //return d.title+ "
" + 'Sponsor: ' + d.sponsor + "
" + 'Key Words: ' + d.key_words ; }); var zoomBeh = d3.behavior.zoom() .x(x) .y(y) .scaleExtent([0, 500]) .on("zoom", zoom); var svg = d3.select("#scatter") .append("svg") .attr("width", outerWidth) .attr("height", outerHeight) .append("g") .attr("transform", "translate(" + margin.left + "," + margin.top + ")") .call(zoomBeh); svg.call(tip); svg.append("rect") .attr("width", width) .attr("height", height); svg.append("g") .classed("x axis", true) .attr("transform", "translate(0," + height + ")") .call(xAxis) .append("text") .classed("label", true) .attr("x", width) .attr("y", margin.bottom - 10) .style("text-anchor", "end"); svg.append("g") .classed("y axis", true) .call(yAxis) .append("text") .classed("label", true) .attr("transform", "rotate(-90)") .attr("y", -margin.left) .attr("dy", ".71em") .style("text-anchor", "end"); var objects = svg.append("svg") .classed("objects", true) .attr("width", width) .attr("height", height); objects.append("svg:line") .classed("axisLine hAxisLine", true) .attr("x1", 0) .attr("y1", 0) .attr("x2", width) .attr("y2", 0) .attr("transform", "translate(0," + height + ")"); objects.append("svg:line") .classed("axisLine vAxisLine", true) .attr("x1", 0) .attr("y1", 0) .attr("x2", 0) .attr("y2", height); objects.selectAll(".dot") .data(data) .enter().append("circle") .classed("dot", true) .attr("r", function (d) { return 6 * Math.sqrt(d[rCat] / Math.PI); }) .attr("transform", transform) .style("fill", function(d) { return color(d[colorCat]); }) .on("mouseover", tip.show) .on('mouseout', function(d) { d3.select(".d3-tip").transition().duration(3000).style("1", "0").each("end", tip.hide)}); var legend = svg.selectAll(".legend") .data(color.domain()) .enter().append("g") .classed("legend", true) .attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; }); legend.append("circle") .attr("r", 7) .attr("cx", width + 15) .attr("fill", color); legend.append("text") .attr("x", width + 26) .attr("dy", ".35em") .style("font-size","20px") .text(function(d) { return d; }); d3.select("input").on("click", change); function change() { xCat = "tsne_x"; xMax = d3.max(data, function(d) { return d[xCat]; }); xMin = d3.min(data, function(d) { return d[xCat]; }); zoomBeh.x(x.domain([xMin, xMax])).y(y.domain([yMin, yMax])); var svg = d3.select("#scatter").transition(); svg.select(".x.axis").duration(750).call(xAxis).select(".label").text(xCat); objects.selectAll(".dot").transition().duration(1000).attr("transform", transform); } function zoom() { svg.select(".x.axis").call(xAxis); svg.select(".y.axis").call(yAxis); svg.selectAll(".dot") .attr("transform", transform); } function transform(d) { return "translate(" + x(d[xCat]) + "," + y(d[yCat]) + ")"; } });