Histogram (variable bins)Edit

40 bins

Histogram chart using Layer Cake's bin function. Because this will create a nested data structure, we use LayerCake's flatten function to pass to the flatData prop. See the server-side rendered example for the basic D3 function usage.

  import { LayerCake, Svg, bin, takeEvery } from 'layercake';

  import { extent } from 'd3-array';
  import { scaleBand } from 'd3-scale';
  import { format } from 'd3-format';

  import Column from './_components/Column.svelte';
  import AxisX from './_components/AxisX.svelte';
  import AxisY from './_components/AxisY.svelte';

  import calcThresholds from './_modules/calcThresholds.js';

  import data from './_data/unemployment.js';

  const f = format('.2f');

  const xKey = ['x0', 'x1'];
  const yKey = 'length';

  let binCount = 40;

  const domain = extent(data);

  $: thresholds = calcThresholds(domain, binCount);
  $: slimThresholds = takeEvery(thresholds, 5);

  $: binnedData = bin(data, d => d, {

<div class="input-container" style="position: absolute;right:10px;z-index: 9;">
  <input style="margin:0;" type="range" min="4" max="100" step="4" bind:value={binCount} />
    style="display:inline-block;vertical-align:top;width: 70px;text-align:right;"
    >{binCount} bins</span

<div class="chart-container">
    padding={{ top: 20, right: 5, bottom: 20, left: 30 }}
    yDomain={[0, null]}
      <AxisX gridlines={false} baseline ticks={slimThresholds} format={d => +f(d)} />
      <AxisY gridlines={false} ticks={3} />
      <Column fill="#fff" stroke="#000" strokeWidth={1} />

    The wrapper div needs to have an explicit width and height in CSS.
    It can also be a flexbox child or CSS grid element.
    The point being it needs dimensions since the <LayerCake> element will
    expand to fill it.
  .chart-container {
    width: 100%;
    height: 250px;
  input {
    height: auto;