t-viSNE: Interactive Assessment and Interpretation of t-SNE Projections
				https://doi.org/10.1109/TVCG.2020.2986996
			
			
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							92 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							92 lines
						
					
					
						
							2.0 KiB
						
					
					
				<!DOCTYPE html>
 | 
						|
<meta charset="utf-8">
 | 
						|
<style>
 | 
						|
 | 
						|
body {
 | 
						|
  margin: 0;
 | 
						|
  overflow: hidden;
 | 
						|
}
 | 
						|
 | 
						|
svg {
 | 
						|
  font: 10px sans-serif;
 | 
						|
}
 | 
						|
 | 
						|
.caption {
 | 
						|
  font-weight: bold;
 | 
						|
}
 | 
						|
 | 
						|
.key path {
 | 
						|
  display: none;
 | 
						|
}
 | 
						|
 | 
						|
.key line {
 | 
						|
  stroke: #000;
 | 
						|
  shape-rendering: crispEdges;
 | 
						|
}
 | 
						|
 | 
						|
</style>
 | 
						|
<body>
 | 
						|
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
 | 
						|
<script src="../d3-legend.min.js"></script>
 | 
						|
<script>
 | 
						|
 | 
						|
var width = 960,
 | 
						|
    height = 500,
 | 
						|
    formatPercent = d3.format(".0%"),
 | 
						|
    formatNumber = d3.format(".0f");
 | 
						|
 | 
						|
var threshold = d3.scale.threshold()
 | 
						|
    .domain([.11, .22, .33, .50])
 | 
						|
    .range(["#6e7c5a", "#a0b28f", "#d8b8b3", "#b45554", "#760000"]);
 | 
						|
 | 
						|
// A position encoding for the key only.
 | 
						|
var x = d3.scale.linear()
 | 
						|
    .domain([0, 1])
 | 
						|
    .range([0, 240]);
 | 
						|
 | 
						|
var xAxis = d3.svg.axis()
 | 
						|
    .scale(x)
 | 
						|
    .orient("bottom")
 | 
						|
    .tickSize(13)
 | 
						|
    .tickValues(threshold.domain())
 | 
						|
    .tickFormat(function(d) { return d === .5 ? formatPercent(d) : formatNumber(100 * d); });
 | 
						|
 | 
						|
var svg = d3.select("body").append("svg")
 | 
						|
    .attr("width", width)
 | 
						|
    .attr("height", height);
 | 
						|
 | 
						|
var g = svg.append("g")
 | 
						|
    .attr("class", "key")
 | 
						|
    .attr("transform", "translate(" + (width - 240) / 2 + "," + height / 2 + ")");
 | 
						|
 | 
						|
var legend = d3.legend.color()
 | 
						|
      .scale(threshold)
 | 
						|
      .orient("horizontal")
 | 
						|
      .shapeWidth(60);
 | 
						|
 | 
						|
svg.append("g")
 | 
						|
  .attr("class", "legend")
 | 
						|
  .attr("transform", "translate(20,20)");
 | 
						|
 | 
						|
svg.select(".legend")
 | 
						|
  .call(legend);
 | 
						|
 | 
						|
g.selectAll("rect")
 | 
						|
    .data(threshold.range().map(function(color) {
 | 
						|
      var d = threshold.invertExtent(color);
 | 
						|
      if (d[0] == null) d[0] = x.domain()[0];
 | 
						|
      if (d[1] == null) d[1] = x.domain()[1];
 | 
						|
      return d;
 | 
						|
    }))
 | 
						|
  .enter().append("rect")
 | 
						|
    .attr("height", 8)
 | 
						|
    .attr("x", function(d) { return x(d[0]); })
 | 
						|
    .attr("width", function(d) { return x(d[1]) - x(d[0]); })
 | 
						|
    .style("fill", function(d) { return threshold(d[0]); });
 | 
						|
 | 
						|
g.call(xAxis).append("text")
 | 
						|
    .attr("class", "caption")
 | 
						|
    .attr("y", -6)
 | 
						|
    .text("Percentage of stops that involved force");
 | 
						|
 | 
						|
</script> |