Skip to content

Violin Plot

ts
// import { density1d } from "fast-kde";

StackX(
  { spacing: 64, sharedScale: true },
  For(groupBy(penguins, "Species"), (d, species) => {
    const density = Array.from(
      density1d(d.map((p) => p["Body Mass (g)"]).filter((w) => w !== null))
    );
    return Frame({}, [
      StackY(
        { spacing: 0 },
        For(density, (d) =>
          Rect({ y: d.x / 40, w: d.y * 100000, h: 0, fill: v(species) }).name(
            `${species}-${d.x}`
          )
        )
      ),
      ConnectY(
        { opacity: 1, mixBlendMode: "normal" },
        For(density, (d) => Ref(`${species}-${d.x}`))
      ),
    ]);
  })
).render(root, { w: 500, h: 300 });