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.
120 lines
2.7 KiB
120 lines
2.7 KiB
6 years ago
|
<!DOCTYPE html>
|
||
|
<html>
|
||
|
<head>
|
||
|
<title>d3.tip.js - Tooltips for D3</title>
|
||
|
<meta charset="utf-8" />
|
||
|
<title>Circles</title>
|
||
|
<script type="text/javascript" src="../bower_components/d3/d3.js"></script>
|
||
|
<script type="text/javascript" src="../index.js"></script>
|
||
|
<style type="text/css">
|
||
|
body {
|
||
|
padding: 40px;
|
||
|
font-family: "Helvetica Neue", Helvetica, sans-serif;
|
||
|
font-size: 12px;
|
||
|
}
|
||
|
|
||
|
.d3-tip {
|
||
|
line-height: 1;
|
||
|
font-weight: bold;
|
||
|
padding: 12px;
|
||
|
background: rgba(0, 0, 0, 0.8);
|
||
|
color: #fff;
|
||
|
border-radius: 2px;
|
||
|
}
|
||
|
|
||
|
.d3-tip text {
|
||
|
fill: #fff;
|
||
|
font-size: 12px;
|
||
|
stroke: none;
|
||
|
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||
|
}
|
||
|
|
||
|
circle {
|
||
|
fill: #ccc;
|
||
|
fill-opacity: 0.6;
|
||
|
stroke: #bbb;
|
||
|
stroke-width: 1px;
|
||
|
}
|
||
|
|
||
|
circle:hover {
|
||
|
fill: #bbb;
|
||
|
stroke: #999;
|
||
|
}
|
||
|
|
||
|
circle.clickable:hover {
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
|
||
|
.rule {
|
||
|
stroke-width: 1px;
|
||
|
stroke: #c00;
|
||
|
shape-rendering: crispedges;
|
||
|
}
|
||
|
</style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<script type="text/javascript">
|
||
|
var data = [],
|
||
|
random = d3.random.normal(5),
|
||
|
random2 = d3.random.irwinHall(1)
|
||
|
for(var i = 0; i < 100; i++) data.push(random(i))
|
||
|
|
||
|
var tip = d3.tip()
|
||
|
.attr('class', 'd3-tip')
|
||
|
.html(function(d) { return d.toFixed(2) })
|
||
|
.direction('nw')
|
||
|
.offset([0, 3])
|
||
|
|
||
|
var tip2 = d3.tip()
|
||
|
.attr('class', 'd3-tip')
|
||
|
.html(function(d) { return d.toFixed(2) })
|
||
|
.direction('n')
|
||
|
.offset([-3, 0])
|
||
|
|
||
|
var w = 1000,
|
||
|
h = 500,
|
||
|
r = 10,
|
||
|
linex, liney,
|
||
|
x = d3.scale.linear().domain([0, data.length - 1]).range([r, w - r]),
|
||
|
y = d3.scale.linear().domain([0, d3.max(data)]).range([h, 0])
|
||
|
|
||
|
var vis = d3.select(document.body)
|
||
|
.append('svg')
|
||
|
.attr('width', w)
|
||
|
.attr('height', h)
|
||
|
.append('g')
|
||
|
.attr('transform', 'translate(20, 20)')
|
||
|
.call(tip)
|
||
|
|
||
|
vis.selectAll('circle')
|
||
|
.data(data)
|
||
|
.enter().append('circle')
|
||
|
.attr('r', function(d, i) { return random2(i) * 10 })
|
||
|
.attr('cx', function(d, i) { return x(i) })
|
||
|
.attr('cy', y)
|
||
|
.on('mouseover', tip.show)
|
||
|
.on('mouseout', tip.hide)
|
||
|
|
||
|
var vis2 = d3.select(document.body)
|
||
|
.append('svg')
|
||
|
.attr('width', w)
|
||
|
.attr('height', h)
|
||
|
.append('g')
|
||
|
.attr('transform', 'translate(20, 20)')
|
||
|
.call(tip2)
|
||
|
|
||
|
vis2.selectAll('circle')
|
||
|
.data(data)
|
||
|
.enter().append('circle')
|
||
|
.attr('class', 'clickable')
|
||
|
.attr('r', function(d, i) { return random2(i) * 10 })
|
||
|
.attr('cx', function(d, i) { return x(i) })
|
||
|
.attr('cy', y)
|
||
|
.on('click', function(d) {
|
||
|
tip2.hide(d).show(d)
|
||
|
})
|
||
|
|
||
|
</script>
|
||
|
</body>
|
||
|
</html>
|