@ggterm/core 0.2.10 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-plot.js +323 -1
- package/dist/cli.js +312 -0
- package/dist/geoms/beeswarm.d.ts +60 -0
- package/dist/geoms/beeswarm.d.ts.map +1 -0
- package/dist/geoms/index.d.ts +1 -0
- package/dist/geoms/index.d.ts.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +320 -0
- package/dist/pipeline/pipeline.d.ts.map +1 -1
- package/dist/pipeline/render-geoms.d.ts +5 -0
- package/dist/pipeline/render-geoms.d.ts.map +1 -1
- package/dist/stats/beeswarm.d.ts +38 -0
- package/dist/stats/beeswarm.d.ts.map +1 -0
- package/dist/stats/index.d.ts +2 -0
- package/dist/stats/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -2309,6 +2309,58 @@ function parseColor(color) {
|
|
|
2309
2309
|
}
|
|
2310
2310
|
return { r: 128, g: 128, b: 128, a: 1 };
|
|
2311
2311
|
}
|
|
2312
|
+
function renderGeomBeeswarm(data, geom, aes, scales, canvas) {
|
|
2313
|
+
const alpha = geom.params.alpha ?? 1;
|
|
2314
|
+
const fixedColor = geom.params.color;
|
|
2315
|
+
const shape = getPointShape(geom.params.shape);
|
|
2316
|
+
const plotLeft = Math.round(scales.x.range[0]);
|
|
2317
|
+
const plotRight = Math.round(scales.x.range[1]);
|
|
2318
|
+
const plotTop = Math.round(Math.min(scales.y.range[0], scales.y.range[1]));
|
|
2319
|
+
const plotBottom = Math.round(Math.max(scales.y.range[0], scales.y.range[1]));
|
|
2320
|
+
const defaultColors = [
|
|
2321
|
+
{ r: 79, g: 169, b: 238, a: 1 },
|
|
2322
|
+
{ r: 238, g: 136, b: 102, a: 1 },
|
|
2323
|
+
{ r: 102, g: 204, b: 153, a: 1 },
|
|
2324
|
+
{ r: 204, g: 102, b: 204, a: 1 },
|
|
2325
|
+
{ r: 255, g: 200, b: 87, a: 1 },
|
|
2326
|
+
{ r: 138, g: 201, b: 222, a: 1 },
|
|
2327
|
+
{ r: 255, g: 153, b: 153, a: 1 },
|
|
2328
|
+
{ r: 170, g: 170, b: 170, a: 1 }
|
|
2329
|
+
];
|
|
2330
|
+
const categories = new Set;
|
|
2331
|
+
for (const row of data) {
|
|
2332
|
+
categories.add(String(row.xOriginal ?? row[aes.x] ?? "default"));
|
|
2333
|
+
}
|
|
2334
|
+
const categoryList = [...categories];
|
|
2335
|
+
for (const row of data) {
|
|
2336
|
+
const xVal = row.x;
|
|
2337
|
+
const yVal = row.y;
|
|
2338
|
+
if (xVal === null || xVal === undefined || yVal === null || yVal === undefined) {
|
|
2339
|
+
continue;
|
|
2340
|
+
}
|
|
2341
|
+
const numGroups = categoryList.length;
|
|
2342
|
+
const xRange = plotRight - plotLeft;
|
|
2343
|
+
const xNormalized = (Number(xVal) + 0.5) / numGroups;
|
|
2344
|
+
const cx = Math.round(plotLeft + xNormalized * xRange);
|
|
2345
|
+
const cy = Math.round(scales.y.map(yVal));
|
|
2346
|
+
let color;
|
|
2347
|
+
if (fixedColor) {
|
|
2348
|
+
color = parseColorToRgba(fixedColor);
|
|
2349
|
+
} else if (scales.color && aes.color) {
|
|
2350
|
+
color = getPointColor(row, aes, scales.color);
|
|
2351
|
+
} else {
|
|
2352
|
+
const category = String(row.xOriginal ?? row[aes.x] ?? "default");
|
|
2353
|
+
const categoryIdx = categoryList.indexOf(category);
|
|
2354
|
+
color = defaultColors[categoryIdx % defaultColors.length];
|
|
2355
|
+
}
|
|
2356
|
+
if (alpha < 1) {
|
|
2357
|
+
color = { ...color, a: alpha };
|
|
2358
|
+
}
|
|
2359
|
+
if (cx >= plotLeft && cx <= plotRight && cy >= plotTop && cy <= plotBottom) {
|
|
2360
|
+
canvas.drawChar(cx, cy, shape, color);
|
|
2361
|
+
}
|
|
2362
|
+
}
|
|
2363
|
+
}
|
|
2312
2364
|
function renderGeom(data, geom, aes, scales, canvas, coordType) {
|
|
2313
2365
|
switch (geom.type) {
|
|
2314
2366
|
case "point":
|
|
@@ -2390,6 +2442,10 @@ function renderGeom(data, geom, aes, scales, canvas, coordType) {
|
|
|
2390
2442
|
case "smooth":
|
|
2391
2443
|
renderGeomSmooth(data, geom, aes, scales, canvas);
|
|
2392
2444
|
break;
|
|
2445
|
+
case "beeswarm":
|
|
2446
|
+
case "quasirandom":
|
|
2447
|
+
renderGeomBeeswarm(data, geom, aes, scales, canvas);
|
|
2448
|
+
break;
|
|
2393
2449
|
default:
|
|
2394
2450
|
break;
|
|
2395
2451
|
}
|
|
@@ -3517,6 +3573,224 @@ function stat_xdensity(params = {}) {
|
|
|
3517
3573
|
};
|
|
3518
3574
|
}
|
|
3519
3575
|
|
|
3576
|
+
// src/stats/beeswarm.ts
|
|
3577
|
+
function swarmArrange(yValues, params) {
|
|
3578
|
+
const n = yValues.length;
|
|
3579
|
+
if (n === 0)
|
|
3580
|
+
return { offsets: [], indices: [] };
|
|
3581
|
+
const cex = params.cex ?? 1;
|
|
3582
|
+
const spacing = params.spacing ?? 1;
|
|
3583
|
+
const side = params.side ?? 0;
|
|
3584
|
+
const yRange = Math.max(...yValues) - Math.min(...yValues);
|
|
3585
|
+
const pointSize = yRange / Math.max(n, 10) * cex * spacing;
|
|
3586
|
+
let indices = yValues.map((_, i) => i);
|
|
3587
|
+
const priority = params.priority ?? "ascending";
|
|
3588
|
+
switch (priority) {
|
|
3589
|
+
case "ascending":
|
|
3590
|
+
indices.sort((a, b) => yValues[a] - yValues[b]);
|
|
3591
|
+
break;
|
|
3592
|
+
case "descending":
|
|
3593
|
+
indices.sort((a, b) => yValues[b] - yValues[a]);
|
|
3594
|
+
break;
|
|
3595
|
+
case "random":
|
|
3596
|
+
for (let i = indices.length - 1;i > 0; i--) {
|
|
3597
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
3598
|
+
[indices[i], indices[j]] = [indices[j], indices[i]];
|
|
3599
|
+
}
|
|
3600
|
+
break;
|
|
3601
|
+
case "density":
|
|
3602
|
+
const median = yValues.slice().sort((a, b) => a - b)[Math.floor(n / 2)];
|
|
3603
|
+
indices.sort((a, b) => Math.abs(yValues[a] - median) - Math.abs(yValues[b] - median));
|
|
3604
|
+
break;
|
|
3605
|
+
}
|
|
3606
|
+
const placed = [];
|
|
3607
|
+
const offsets = new Array(n).fill(0);
|
|
3608
|
+
for (const idx of indices) {
|
|
3609
|
+
const y = yValues[idx];
|
|
3610
|
+
let bestOffset = 0;
|
|
3611
|
+
if (placed.length > 0) {
|
|
3612
|
+
const nearby = placed.filter((p) => Math.abs(p.y - y) < pointSize * 2);
|
|
3613
|
+
if (nearby.length > 0) {
|
|
3614
|
+
const maxOffset = nearby.length * pointSize;
|
|
3615
|
+
let foundSpot = false;
|
|
3616
|
+
for (let tryOffset = 0;tryOffset <= maxOffset && !foundSpot; tryOffset += pointSize * 0.5) {
|
|
3617
|
+
if (side >= 0) {
|
|
3618
|
+
let collision = false;
|
|
3619
|
+
for (const p of nearby) {
|
|
3620
|
+
const dx = tryOffset - p.x;
|
|
3621
|
+
const dy = y - p.y;
|
|
3622
|
+
const dist = Math.sqrt(dx * dx + dy * dy);
|
|
3623
|
+
if (dist < pointSize) {
|
|
3624
|
+
collision = true;
|
|
3625
|
+
break;
|
|
3626
|
+
}
|
|
3627
|
+
}
|
|
3628
|
+
if (!collision) {
|
|
3629
|
+
bestOffset = tryOffset;
|
|
3630
|
+
foundSpot = true;
|
|
3631
|
+
break;
|
|
3632
|
+
}
|
|
3633
|
+
}
|
|
3634
|
+
if (side <= 0 && tryOffset > 0 && !foundSpot) {
|
|
3635
|
+
let collision = false;
|
|
3636
|
+
for (const p of nearby) {
|
|
3637
|
+
const dx = -tryOffset - p.x;
|
|
3638
|
+
const dy = y - p.y;
|
|
3639
|
+
const dist = Math.sqrt(dx * dx + dy * dy);
|
|
3640
|
+
if (dist < pointSize) {
|
|
3641
|
+
collision = true;
|
|
3642
|
+
break;
|
|
3643
|
+
}
|
|
3644
|
+
}
|
|
3645
|
+
if (!collision) {
|
|
3646
|
+
bestOffset = -tryOffset;
|
|
3647
|
+
foundSpot = true;
|
|
3648
|
+
break;
|
|
3649
|
+
}
|
|
3650
|
+
}
|
|
3651
|
+
}
|
|
3652
|
+
}
|
|
3653
|
+
}
|
|
3654
|
+
offsets[idx] = bestOffset;
|
|
3655
|
+
placed.push({ y, x: bestOffset });
|
|
3656
|
+
}
|
|
3657
|
+
const maxAbsOffset = Math.max(...offsets.map(Math.abs), 0.001);
|
|
3658
|
+
const dodge = params.dodge ?? 0.8;
|
|
3659
|
+
const scale = dodge * 0.5 / maxAbsOffset;
|
|
3660
|
+
for (let i = 0;i < offsets.length; i++) {
|
|
3661
|
+
offsets[i] *= scale;
|
|
3662
|
+
}
|
|
3663
|
+
return { offsets, indices };
|
|
3664
|
+
}
|
|
3665
|
+
function centerArrange(yValues, params) {
|
|
3666
|
+
const n = yValues.length;
|
|
3667
|
+
if (n === 0)
|
|
3668
|
+
return { offsets: [], indices: [] };
|
|
3669
|
+
const dodge = params.dodge ?? 0.8;
|
|
3670
|
+
const side = params.side ?? 0;
|
|
3671
|
+
const indices = yValues.map((_, i) => i);
|
|
3672
|
+
indices.sort((a, b) => yValues[a] - yValues[b]);
|
|
3673
|
+
const offsets = new Array(n).fill(0);
|
|
3674
|
+
const maxOffset = dodge * 0.4;
|
|
3675
|
+
for (let i = 0;i < indices.length; i++) {
|
|
3676
|
+
const idx = indices[i];
|
|
3677
|
+
const layer = Math.floor(i / 2) + 1;
|
|
3678
|
+
const offset = layer / Math.ceil(n / 2) * maxOffset;
|
|
3679
|
+
if (side === 0) {
|
|
3680
|
+
offsets[idx] = i % 2 === 0 ? offset : -offset;
|
|
3681
|
+
} else {
|
|
3682
|
+
offsets[idx] = side * offset;
|
|
3683
|
+
}
|
|
3684
|
+
}
|
|
3685
|
+
return { offsets, indices };
|
|
3686
|
+
}
|
|
3687
|
+
function squareArrange(yValues, params) {
|
|
3688
|
+
const n = yValues.length;
|
|
3689
|
+
if (n === 0)
|
|
3690
|
+
return { offsets: [], indices: [] };
|
|
3691
|
+
const dodge = params.dodge ?? 0.8;
|
|
3692
|
+
const side = params.side ?? 0;
|
|
3693
|
+
const indices = yValues.map((_, i) => i);
|
|
3694
|
+
indices.sort((a, b) => yValues[a] - yValues[b]);
|
|
3695
|
+
const offsets = new Array(n).fill(0);
|
|
3696
|
+
const yRange = Math.max(...yValues) - Math.min(...yValues);
|
|
3697
|
+
const binSize = yRange / Math.max(Math.sqrt(n), 3);
|
|
3698
|
+
const bins = new Map;
|
|
3699
|
+
for (let i = 0;i < indices.length; i++) {
|
|
3700
|
+
const idx = indices[i];
|
|
3701
|
+
const y = yValues[idx];
|
|
3702
|
+
const binKey = Math.floor(y / binSize);
|
|
3703
|
+
if (!bins.has(binKey)) {
|
|
3704
|
+
bins.set(binKey, []);
|
|
3705
|
+
}
|
|
3706
|
+
bins.get(binKey).push(idx);
|
|
3707
|
+
}
|
|
3708
|
+
for (const binIndices of bins.values()) {
|
|
3709
|
+
const binN = binIndices.length;
|
|
3710
|
+
const maxOffset = dodge * 0.4;
|
|
3711
|
+
for (let i = 0;i < binN; i++) {
|
|
3712
|
+
const idx = binIndices[i];
|
|
3713
|
+
const offset = (i - (binN - 1) / 2) * (maxOffset * 2 / Math.max(binN - 1, 1));
|
|
3714
|
+
if (side === 0) {
|
|
3715
|
+
offsets[idx] = offset;
|
|
3716
|
+
} else if (side > 0) {
|
|
3717
|
+
offsets[idx] = Math.abs(offset);
|
|
3718
|
+
} else {
|
|
3719
|
+
offsets[idx] = -Math.abs(offset);
|
|
3720
|
+
}
|
|
3721
|
+
}
|
|
3722
|
+
}
|
|
3723
|
+
return { offsets, indices };
|
|
3724
|
+
}
|
|
3725
|
+
function computeBeeswarm(data, _xField, yField, groupKey, groupIndex, params = {}) {
|
|
3726
|
+
const yValues = [];
|
|
3727
|
+
const originalRows = [];
|
|
3728
|
+
for (const row of data) {
|
|
3729
|
+
const yVal = row[yField];
|
|
3730
|
+
if (yVal === null || yVal === undefined)
|
|
3731
|
+
continue;
|
|
3732
|
+
const numY = Number(yVal);
|
|
3733
|
+
if (isNaN(numY))
|
|
3734
|
+
continue;
|
|
3735
|
+
yValues.push(numY);
|
|
3736
|
+
originalRows.push(row);
|
|
3737
|
+
}
|
|
3738
|
+
if (yValues.length === 0)
|
|
3739
|
+
return [];
|
|
3740
|
+
const method = params.method ?? "swarm";
|
|
3741
|
+
let result;
|
|
3742
|
+
switch (method) {
|
|
3743
|
+
case "center":
|
|
3744
|
+
result = centerArrange(yValues, params);
|
|
3745
|
+
break;
|
|
3746
|
+
case "square":
|
|
3747
|
+
result = squareArrange(yValues, params);
|
|
3748
|
+
break;
|
|
3749
|
+
case "swarm":
|
|
3750
|
+
default:
|
|
3751
|
+
result = swarmArrange(yValues, params);
|
|
3752
|
+
}
|
|
3753
|
+
const output = [];
|
|
3754
|
+
for (let i = 0;i < yValues.length; i++) {
|
|
3755
|
+
const originalRow = originalRows[i];
|
|
3756
|
+
output.push({
|
|
3757
|
+
x: groupIndex + result.offsets[i],
|
|
3758
|
+
y: yValues[i],
|
|
3759
|
+
xOriginal: groupKey,
|
|
3760
|
+
yOriginal: yValues[i],
|
|
3761
|
+
xOffset: result.offsets[i],
|
|
3762
|
+
...originalRow
|
|
3763
|
+
});
|
|
3764
|
+
}
|
|
3765
|
+
return output;
|
|
3766
|
+
}
|
|
3767
|
+
function stat_beeswarm(params = {}) {
|
|
3768
|
+
return {
|
|
3769
|
+
type: "beeswarm",
|
|
3770
|
+
compute(data, aes) {
|
|
3771
|
+
const groups = new Map;
|
|
3772
|
+
const groupOrder = [];
|
|
3773
|
+
for (const row of data) {
|
|
3774
|
+
const groupKey = String(row[aes.x] ?? "default");
|
|
3775
|
+
if (!groups.has(groupKey)) {
|
|
3776
|
+
groups.set(groupKey, []);
|
|
3777
|
+
groupOrder.push(groupKey);
|
|
3778
|
+
}
|
|
3779
|
+
groups.get(groupKey).push(row);
|
|
3780
|
+
}
|
|
3781
|
+
const result = [];
|
|
3782
|
+
let groupIndex = 0;
|
|
3783
|
+
for (const groupKey of groupOrder) {
|
|
3784
|
+
const groupData = groups.get(groupKey);
|
|
3785
|
+
const swarmResult = computeBeeswarm(groupData, aes.x, aes.y, groupKey, groupIndex, params);
|
|
3786
|
+
result.push(...swarmResult);
|
|
3787
|
+
groupIndex++;
|
|
3788
|
+
}
|
|
3789
|
+
return result;
|
|
3790
|
+
}
|
|
3791
|
+
};
|
|
3792
|
+
}
|
|
3793
|
+
|
|
3520
3794
|
// src/stats/smooth.ts
|
|
3521
3795
|
function linearRegression(xs, ys) {
|
|
3522
3796
|
const n = xs.length;
|
|
@@ -4396,6 +4670,15 @@ function applyStatTransform(data, geom, aes) {
|
|
|
4396
4670
|
adjust: geom.params.adjust
|
|
4397
4671
|
});
|
|
4398
4672
|
return xdensityStat.compute(data, aes);
|
|
4673
|
+
} else if (geom.stat === "beeswarm") {
|
|
4674
|
+
const beeswarmStat = stat_beeswarm({
|
|
4675
|
+
method: geom.params.method,
|
|
4676
|
+
cex: geom.params.cex,
|
|
4677
|
+
side: geom.params.side,
|
|
4678
|
+
priority: geom.params.priority,
|
|
4679
|
+
dodge: geom.params.dodge
|
|
4680
|
+
});
|
|
4681
|
+
return beeswarmStat.compute(data, aes);
|
|
4399
4682
|
} else if (geom.stat === "smooth") {
|
|
4400
4683
|
const smoothStat = stat_smooth({
|
|
4401
4684
|
method: geom.params.method,
|
|
@@ -4522,6 +4805,10 @@ function renderToCanvas(spec, options) {
|
|
|
4522
4805
|
scaleData = applyStatTransform(spec.data, geom, spec.aes);
|
|
4523
4806
|
scaleAes = { ...spec.aes, x: "x", y: "y" };
|
|
4524
4807
|
break;
|
|
4808
|
+
} else if (geom.stat === "beeswarm") {
|
|
4809
|
+
scaleData = spec.data;
|
|
4810
|
+
scaleAes = spec.aes;
|
|
4811
|
+
break;
|
|
4525
4812
|
}
|
|
4526
4813
|
}
|
|
4527
4814
|
scaleData = applyCoordTransform(scaleData, scaleAes, spec.coord);
|
|
@@ -4562,6 +4849,8 @@ function renderToCanvas(spec, options) {
|
|
|
4562
4849
|
geomAes = { ...spec.aes, x: "x", y: "y" };
|
|
4563
4850
|
} else if (geom.stat === "xdensity") {
|
|
4564
4851
|
geomAes = { ...spec.aes, x: "x", y: "y" };
|
|
4852
|
+
} else if (geom.stat === "beeswarm") {
|
|
4853
|
+
geomAes = { ...spec.aes, x: "x", y: "y" };
|
|
4565
4854
|
}
|
|
4566
4855
|
geomData = applyCoordTransform(geomData, geomAes, spec.coord);
|
|
4567
4856
|
}
|
|
@@ -5501,6 +5790,29 @@ var init_ridgeline = __esm(() => {
|
|
|
5501
5790
|
geom_joy = geom_ridgeline;
|
|
5502
5791
|
});
|
|
5503
5792
|
|
|
5793
|
+
// src/geoms/beeswarm.ts
|
|
5794
|
+
function geom_beeswarm(options = {}) {
|
|
5795
|
+
return {
|
|
5796
|
+
type: "beeswarm",
|
|
5797
|
+
stat: "beeswarm",
|
|
5798
|
+
position: "identity",
|
|
5799
|
+
params: {
|
|
5800
|
+
method: options.method ?? "swarm",
|
|
5801
|
+
size: options.size ?? 1,
|
|
5802
|
+
cex: options.cex ?? 1,
|
|
5803
|
+
alpha: options.alpha ?? 1,
|
|
5804
|
+
color: options.color,
|
|
5805
|
+
shape: options.shape ?? "circle",
|
|
5806
|
+
side: options.side ?? 0,
|
|
5807
|
+
priority: options.priority ?? "ascending",
|
|
5808
|
+
dodge: options.dodge ?? 0.8
|
|
5809
|
+
}
|
|
5810
|
+
};
|
|
5811
|
+
}
|
|
5812
|
+
function geom_quasirandom(options = {}) {
|
|
5813
|
+
return geom_beeswarm({ ...options, method: "center" });
|
|
5814
|
+
}
|
|
5815
|
+
|
|
5504
5816
|
// src/geoms/index.ts
|
|
5505
5817
|
var init_geoms = __esm(() => {
|
|
5506
5818
|
init_ridgeline();
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* geom_beeswarm - Beeswarm plot geometry
|
|
3
|
+
*
|
|
4
|
+
* Creates jittered point plots where points are arranged to avoid overlap,
|
|
5
|
+
* showing both individual data points and distribution shape.
|
|
6
|
+
*/
|
|
7
|
+
import type { Geom } from '../types';
|
|
8
|
+
export interface BeeswarmOptions {
|
|
9
|
+
/** Method for arranging points: 'swarm' | 'center' | 'square' (default: 'swarm') */
|
|
10
|
+
method?: 'swarm' | 'center' | 'square';
|
|
11
|
+
/** Point size multiplier (default: 1) */
|
|
12
|
+
size?: number;
|
|
13
|
+
/** Point size for collision detection (default: 1) */
|
|
14
|
+
cex?: number;
|
|
15
|
+
/** Alpha transparency (default: 1) */
|
|
16
|
+
alpha?: number;
|
|
17
|
+
/** Point color */
|
|
18
|
+
color?: string;
|
|
19
|
+
/** Point shape: 'circle' | 'square' | 'triangle' | 'diamond' | 'cross' */
|
|
20
|
+
shape?: string;
|
|
21
|
+
/** Side to place points: 0 (both), -1 (left), 1 (right) (default: 0) */
|
|
22
|
+
side?: -1 | 0 | 1;
|
|
23
|
+
/** Priority for placing points: 'ascending' | 'descending' | 'density' | 'random' */
|
|
24
|
+
priority?: 'ascending' | 'descending' | 'density' | 'random';
|
|
25
|
+
/** Dodge width for categorical spacing (default: 0.8) */
|
|
26
|
+
dodge?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create beeswarm point geometry
|
|
30
|
+
*
|
|
31
|
+
* Beeswarm plots arrange points to avoid overlap while showing their
|
|
32
|
+
* exact values, combining the benefits of jitter and violin plots.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* import { gg, geom_beeswarm } from '@ggterm/core'
|
|
37
|
+
*
|
|
38
|
+
* // Basic beeswarm plot
|
|
39
|
+
* gg(data)
|
|
40
|
+
* .aes({ x: 'group', y: 'value' })
|
|
41
|
+
* .geom(geom_beeswarm())
|
|
42
|
+
*
|
|
43
|
+
* // Customized with color and method
|
|
44
|
+
* gg(data)
|
|
45
|
+
* .aes({ x: 'treatment', y: 'response', color: 'treatment' })
|
|
46
|
+
* .geom(geom_beeswarm({ method: 'swarm', size: 2, alpha: 0.8 }))
|
|
47
|
+
*
|
|
48
|
+
* // One-sided swarm
|
|
49
|
+
* gg(data)
|
|
50
|
+
* .aes({ x: 'category', y: 'measurement' })
|
|
51
|
+
* .geom(geom_beeswarm({ side: 1 })) // Points only to the right
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function geom_beeswarm(options?: BeeswarmOptions): Geom;
|
|
55
|
+
/**
|
|
56
|
+
* Alias for beeswarm with quasirandom-like arrangement
|
|
57
|
+
* Uses 'center' method for a more uniform look
|
|
58
|
+
*/
|
|
59
|
+
export declare function geom_quasirandom(options?: Omit<BeeswarmOptions, 'method'>): Geom;
|
|
60
|
+
//# sourceMappingURL=beeswarm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beeswarm.d.ts","sourceRoot":"","sources":["../../src/geoms/beeswarm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAEpC,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACtC,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wEAAwE;IACxE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACjB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAA;IAC5D,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,IAAI,CAiBjE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAM,GAAG,IAAI,CAEpF"}
|
package/dist/geoms/index.d.ts
CHANGED
|
@@ -21,4 +21,5 @@ export { geom_errorbar, geom_errorbarh, geom_crossbar, geom_linerange, geom_poin
|
|
|
21
21
|
export { geom_rect, geom_abline, type RectOptions, type AblineOptions } from './rect';
|
|
22
22
|
export { geom_qq, geom_qq_line, type QQOptions, type QQLineOptions } from './qq';
|
|
23
23
|
export { geom_ridgeline, geom_joy, type RidgelineOptions } from './ridgeline';
|
|
24
|
+
export { geom_beeswarm, geom_quasirandom, type BeeswarmOptions } from './beeswarm';
|
|
24
25
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/geoms/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AACxG,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AACzE,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAA;AAGjD,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AACnG,OAAO,EACL,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,KAAK,eAAe,GACrB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAA;AACrF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,MAAM,CAAA;AAChF,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/geoms/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AACxG,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AACzE,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,OAAO,CAAA;AAGjD,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AACnG,OAAO,EACL,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,KAAK,eAAe,GACrB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAA;AACrF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,MAAM,CAAA;AAChF,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,12 +9,12 @@ export type { AestheticMapping, Canvas, CanvasCell, ComputedPoint, Coord, DataRe
|
|
|
9
9
|
export { TerminalCanvas, createCanvas, DEFAULT_FG, DEFAULT_BG } from './canvas';
|
|
10
10
|
export { renderToCanvas, renderToString, calculateLayout, buildScaleContext, inferContinuousDomain, inferDiscreteDomain, } from './pipeline';
|
|
11
11
|
export type { PlotLayout, ResolvedScale, ScaleContext } from './pipeline';
|
|
12
|
-
export { geom_point, geom_line, geom_path, geom_hline, geom_vline, geom_bar, geom_col, geom_text, geom_label, geom_area, geom_ribbon, geom_histogram, geom_boxplot, geom_segment, geom_curve, geom_smooth, geom_step, geom_rug, geom_violin, geom_tile, geom_raster, geom_bin2d, geom_contour, geom_contour_filled, geom_density_2d, geom_errorbar, geom_errorbarh, geom_crossbar, geom_linerange, geom_pointrange, geom_rect, geom_abline, geom_qq, geom_qq_line, geom_freqpoly, geom_ridgeline, geom_joy, } from './geoms';
|
|
13
|
-
export type { PathOptions, RugOptions, SmoothOptions, StepOptions, ViolinOptions, TileOptions, Bin2dOptions, ContourOptions, ErrorbarOptions, RectOptions, AblineOptions, QQOptions, QQLineOptions, FreqpolyOptions, RidgelineOptions, } from './geoms';
|
|
12
|
+
export { geom_point, geom_line, geom_path, geom_hline, geom_vline, geom_bar, geom_col, geom_text, geom_label, geom_area, geom_ribbon, geom_histogram, geom_boxplot, geom_segment, geom_curve, geom_smooth, geom_step, geom_rug, geom_violin, geom_tile, geom_raster, geom_bin2d, geom_contour, geom_contour_filled, geom_density_2d, geom_errorbar, geom_errorbarh, geom_crossbar, geom_linerange, geom_pointrange, geom_rect, geom_abline, geom_qq, geom_qq_line, geom_freqpoly, geom_ridgeline, geom_joy, geom_beeswarm, geom_quasirandom, } from './geoms';
|
|
13
|
+
export type { PathOptions, RugOptions, SmoothOptions, StepOptions, ViolinOptions, TileOptions, Bin2dOptions, ContourOptions, ErrorbarOptions, RectOptions, AblineOptions, QQOptions, QQLineOptions, FreqpolyOptions, RidgelineOptions, BeeswarmOptions, } from './geoms';
|
|
14
14
|
export { position_identity, position_dodge, position_stack, position_fill, position_jitter, applyPositionAdjustment, isStackPosition, isDodgePosition, getPositionType, } from './positions';
|
|
15
15
|
export type { Position, AdjustedPoint, DodgeOptions, JitterOptions, StackOptions, FillOptions, } from './positions';
|
|
16
|
-
export { stat_bin, stat_bin2d, stat_boxplot, stat_density, stat_smooth, stat_summary, stat_qq, stat_qq_line, computeBins, computeBins2d, computeBoxplotStats, computeDensity, computeSmooth, computeSummary, computeQQ, computeQQLine, } from './stats';
|
|
17
|
-
export type { StatBinParams, StatBin2dParams, Bin2dResult, BinResult, StatBoxplotParams, BoxplotResult, StatDensityParams, DensityResult, StatSmoothParams, SmoothResult, StatSummaryParams, SummaryResult, SummaryFun, StatQQParams, QQResult, } from './stats';
|
|
16
|
+
export { stat_bin, stat_bin2d, stat_boxplot, stat_density, stat_smooth, stat_summary, stat_qq, stat_qq_line, computeBins, computeBins2d, computeBoxplotStats, computeDensity, computeSmooth, computeSummary, computeQQ, computeQQLine, stat_beeswarm, computeBeeswarm, } from './stats';
|
|
17
|
+
export type { StatBinParams, StatBin2dParams, Bin2dResult, BinResult, StatBoxplotParams, BoxplotResult, StatDensityParams, DensityResult, StatSmoothParams, SmoothResult, StatSummaryParams, SummaryResult, SummaryFun, StatQQParams, QQResult, StatBeeswarmParams, BeeswarmResult, } from './stats';
|
|
18
18
|
export { scale_x_continuous, scale_y_continuous, scale_x_log10, scale_y_log10, scale_x_sqrt, scale_y_sqrt, scale_x_reverse, scale_y_reverse, scale_y2_continuous, scale_y2_log10, scale_y2_sqrt, scale_y2_reverse, scale_x_discrete, scale_y_discrete, scale_color_continuous, scale_color_viridis, scale_color_discrete, scale_color_manual, scale_fill_continuous, scale_fill_viridis, scale_fill_discrete, scale_fill_manual, scale_color_brewer, scale_fill_brewer, scale_color_distiller, scale_fill_distiller, scale_color_gradient, scale_fill_gradient, scale_color_gradient2, scale_fill_gradient2, scale_color_gradientn, scale_fill_gradientn, getAvailablePalettes, getPaletteColors, scale_size_continuous, scale_size_area, scale_size_radius, scale_size_identity, scale_size_binned, scale_shape_discrete, scale_shape_manual, scale_shape_identity, scale_shape_ordinal, DEFAULT_SHAPES, SHAPE_CHARS, scale_alpha_continuous, scale_alpha, scale_alpha_identity, scale_alpha_discrete, scale_alpha_manual, scale_alpha_binned, scale_x_datetime, scale_y_datetime, scale_x_date, scale_y_date, scale_x_time, scale_y_time, scale_x_duration, scale_y_duration, formatDateTime, calculateDateTimeTicks, } from './scales';
|
|
19
19
|
export type { SizeScaleOptions, BinnedSizeOptions, ShapeScaleOptions, ManualShapeOptions, AlphaScaleOptions, DiscreteAlphaOptions, ManualAlphaOptions, BinnedAlphaOptions, DateTimeScaleOptions, TimeScaleOptions, DurationScaleOptions, BrewerPalette, BrewerOptions, DistillerOptions, GradientOptions, Gradient2Options, GradientNOptions, PaletteName, } from './scales';
|
|
20
20
|
export { coordCartesian, coordFlip, coordPolar, coordFixed, coordEqual, coordTrans, coordFlipWithLimits, } from './coords/cartesian';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAGtC,YAAY,EACV,gBAAgB,EAChB,MAAM,EACN,UAAU,EACV,aAAa,EACb,KAAK,EACL,UAAU,EACV,UAAU,EACV,MAAM,EACN,KAAK,EACL,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,aAAa,EACb,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,KAAK,GACN,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAG/E,OAAO,EACL,cAAc,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGzE,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EAER,WAAW,EACX,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,SAAS,EACT,WAAW,EAEX,OAAO,EACP,YAAY,EAEZ,aAAa,EAEb,cAAc,EACd,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|