mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-23 05:58:12 +08:00
* comment * add histogram functionality to Dataframe; port category occupancy to use it * fix binning and create histogram for continous by catagorical * Remove unnecessary logs * Begin work on KDE * Replace broken KDE with working histogram * Define domain and range based on data from histogram * Fix occupancy * Add continuous obs and switch to canvas * Stop value from always rerendering * clear before render * Clear canvas on render * refactor categorical occupancy to canvas * Remove log * simplify finding max * refactor kde->histogram and occupancy->bins * refactor svg -> canvas * rename to occupancy stack * create popup * add metadata and categorical values to popup * fix overflow * remove zeros info * style graph * fix shouldComponentUpdate to look for world changes * change categorySelected -> categoryValueSelected * refactor out render * remove comment * conditionally have bottom border * remove diff comp * remove comments * remove unnecessary mapping * Add comments describing drawing functions * comments * flip comparison order * remove logging * move default to parameter * move defaults to parameter * disable popover if not showing histogram * fix wording and styling * add line break
70 lines
2.0 KiB
JavaScript
70 lines
2.0 KiB
JavaScript
import * as Dataframe from "../../../src/util/dataframe";
|
|
|
|
describe("Dataframe column histogram", () => {
|
|
test("categorical by categorical", () => {
|
|
const df = new Dataframe.Dataframe(
|
|
[3, 3],
|
|
[["n1", "n2", "n3"], ["c1", "c2", "c3"], new Int32Array([0, 1, 2])],
|
|
null,
|
|
new Dataframe.KeyIndex(["name", "cat", "value"])
|
|
);
|
|
|
|
const h1 = df.col("cat").histogram(df.col("name"));
|
|
expect(h1).toMatchObject(
|
|
new Map([
|
|
["n1", new Map([["c1", 1]])],
|
|
["n2", new Map([["c2", 1]])],
|
|
["n3", new Map([["c3", 1]])]
|
|
])
|
|
);
|
|
// memoized?
|
|
expect(df.col("cat").histogram(df.col("name"))).toMatchObject(h1);
|
|
});
|
|
|
|
test("continuous by categorical", () => {
|
|
const df = new Dataframe.Dataframe(
|
|
[3, 3],
|
|
[["n1", "n2", "n3"], ["c1", "c2", "c3"], new Int32Array([0, 1, 2])],
|
|
null,
|
|
new Dataframe.KeyIndex(["name", "cat", "value"])
|
|
);
|
|
|
|
const h1 = df.col("value").histogram(3, [0, 2], df.col("name"));
|
|
expect(h1).toMatchObject(
|
|
new Map([["n1", [1, 0, 0]], ["n2", [0, 1, 0]], ["n3", [0, 0, 1]]])
|
|
);
|
|
// memoized?
|
|
expect(df.col("value").histogram(3, [0, 2], df.col("name"))).toMatchObject(
|
|
h1
|
|
);
|
|
});
|
|
|
|
test("categorical", () => {
|
|
const df = new Dataframe.Dataframe(
|
|
[3, 3],
|
|
[["n1", "n2", "n3"], ["c1", "c2", "c3"], new Int32Array([0, 1, 2])],
|
|
null,
|
|
new Dataframe.KeyIndex(["name", "cat", "value"])
|
|
);
|
|
|
|
const h1 = df.col("cat").histogram();
|
|
expect(h1).toMatchObject(new Map([["c1", 1], ["c2", 1], ["c3", 1]]));
|
|
// memoized?
|
|
expect(df.col("value").histogram(3, [0, 2])).toMatchObject(h1);
|
|
});
|
|
|
|
test("continuous", () => {
|
|
const df = new Dataframe.Dataframe(
|
|
[3, 3],
|
|
[["n1", "n2", "n3"], ["c1", "c2", "c3"], new Int32Array([0, 1, 2])],
|
|
null,
|
|
new Dataframe.KeyIndex(["name", "cat", "value"])
|
|
);
|
|
|
|
const h1 = df.col("value").histogram(3, [0, 2]);
|
|
expect(h1).toMatchObject([1, 1, 1]);
|
|
// memoized?
|
|
expect(df.col("value").histogram(3, [0, 2])).toMatchObject(h1);
|
|
});
|
|
});
|