accurate-beeswarm-plot
Version:
A fast layout algorithm for beeswarm plots
46 lines (38 loc) • 1.51 kB
JavaScript
import { AccurateBeeswarm } from './accurate-beeswarm-plot.js';
let data = [{value: 2, name: "A"}, {value: 3, name: "B"}];
let radius = 5;
let fn = d => d.value;
let result = new AccurateBeeswarm(data, radius, fn)
.calculateYPositions();
assertYValues(result, [0, 9.9498743710662]);
data = [{value: 2, name: "A"}, {value: 2, name: "B"}];
result = new AccurateBeeswarm(data, radius, fn)
.calculateYPositions();
assertYValues(result, [0, 10]);
data = [{value: 2, name: "A"}, {value: 2, name: "B"}];
result = new AccurateBeeswarm(data, radius, fn)
.withTiesBrokenRandomly()
.calculateYPositions();
assertYValues(result, [10, 0]);
data = [{value: 3, name: "A"}, {value: 2, name: "B"}];
result = new AccurateBeeswarm(data, radius, fn)
.calculateYPositions();
assertYValues(result, [9.9498743710662, 0]);
data = [{value: 3, name: "A"}, {value: 2, name: "B"}];
result = new AccurateBeeswarm(data, radius, fn)
.withTiesBrokenByArrayOrder()
.calculateYPositions();
assertYValues(result, [0, 9.9498743710662]);
console.log("All tests passed.");
function assertYValues(actual, expected) {
for (let i=0; i<actual.length; i++) {
if (Math.abs(actual[i].y - expected[i]) > 0.00000001) {
console.log('Actual:');
console.log(actual);
console.log('Expected:');
console.log(expected);
console.log(`These differ at item ${i}.`);
throw new Error("Unexpected y values.");
}
}
}