Index: node_modules/d3-array/src/threshold/freedmanDiaconis.js
===================================================================
--- node_modules/d3-array/src/threshold/freedmanDiaconis.js	(revision e4c61dd6cd86e06265bc2bd91adba84a0f04044a)
+++ node_modules/d3-array/src/threshold/freedmanDiaconis.js	(revision e4c61dd6cd86e06265bc2bd91adba84a0f04044a)
@@ -0,0 +1,7 @@
+import count from "../count.js";
+import quantile from "../quantile.js";
+
+export default function thresholdFreedmanDiaconis(values, min, max) {
+  const c = count(values), d = quantile(values, 0.75) - quantile(values, 0.25);
+  return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;
+}
Index: node_modules/d3-array/src/threshold/scott.js
===================================================================
--- node_modules/d3-array/src/threshold/scott.js	(revision e4c61dd6cd86e06265bc2bd91adba84a0f04044a)
+++ node_modules/d3-array/src/threshold/scott.js	(revision e4c61dd6cd86e06265bc2bd91adba84a0f04044a)
@@ -0,0 +1,7 @@
+import count from "../count.js";
+import deviation from "../deviation.js";
+
+export default function thresholdScott(values, min, max) {
+  const c = count(values), d = deviation(values);
+  return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;
+}
Index: node_modules/d3-array/src/threshold/sturges.js
===================================================================
--- node_modules/d3-array/src/threshold/sturges.js	(revision e4c61dd6cd86e06265bc2bd91adba84a0f04044a)
+++ node_modules/d3-array/src/threshold/sturges.js	(revision e4c61dd6cd86e06265bc2bd91adba84a0f04044a)
@@ -0,0 +1,5 @@
+import count from "../count.js";
+
+export default function thresholdSturges(values) {
+  return Math.max(1, Math.ceil(Math.log(count(values)) / Math.LN2) + 1);
+}
