Create sketch.js
Browse files
sketch.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
let kmeansModel
|
| 2 |
+
const width = 640;
|
| 3 |
+
const height = 480;
|
| 4 |
+
const colDict = {
|
| 5 |
+
0: 'skyblue',
|
| 6 |
+
1: 'coral',
|
| 7 |
+
2: 'olive',
|
| 8 |
+
3: 'tan',
|
| 9 |
+
4: 'grey'
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
const names = [{name: 'john'}, {name: 'mary'}, {name: 'anne'}, {name: 'paul'}, {name: 'george'}];
|
| 13 |
+
const data = [{ x: 300, y: 4}, { x: 2000, y: 3}, { x: 450, y: 5}, { x: 1500, y: 2}, { x: 850, y: 4}];
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
const options = {
|
| 17 |
+
k: 2,
|
| 18 |
+
maxIter: 10,
|
| 19 |
+
threshold: 2,
|
| 20 |
+
};
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
kmeansModel = ml5.kmeans(data, options, clustersCalculated);
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
function clustersCalculated() {
|
| 27 |
+
console.log('Points Clustered!');
|
| 28 |
+
console.log(kmeansModel);
|
| 29 |
+
|
| 30 |
+
const dataset = kmeansModel.dataset;
|
| 31 |
+
|
| 32 |
+
//d3.select('svg').remove();
|
| 33 |
+
|
| 34 |
+
const svg = d3.select('svg');
|
| 35 |
+
|
| 36 |
+
const xScale = d3.scaleLinear()
|
| 37 |
+
.domain(d3.extent(dataset, d => d[0]))
|
| 38 |
+
.range([10, width - 100]);
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
const yScale = d3.scaleLinear()
|
| 42 |
+
.domain(d3.extent(dataset, d => d[1]))
|
| 43 |
+
.range([height - 50, 20]);
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
const circle_data = svg.selectAll('circle')
|
| 47 |
+
.data(dataset)
|
| 48 |
+
.enter();
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
const circles = circle_data.append('circle')
|
| 52 |
+
.attr('cx', d => xScale(d[0]))
|
| 53 |
+
.attr('cy', d => yScale(d[1]))
|
| 54 |
+
.attr('r', 9)
|
| 55 |
+
.attr('fill', (d, i) => colDict[dataset[i].centroid]);
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
circle_data.append('text')
|
| 59 |
+
.attr('dy', d => yScale(d[1]))
|
| 60 |
+
.attr('dx', d => xScale(d[0]))
|
| 61 |
+
.data(names)
|
| 62 |
+
.text(d => d.name);
|
| 63 |
+
|
| 64 |
+
}
|