Histogram (variable bins)Edit
40 bins
- index.svelte
- ./components/Column.svelte
- ./components/AxisX.svelte
- ./components/AxisY.svelte
- ./modules/thresholds.js
- ./data/unemployment.js
<script>
import { LayerCake, Svg } from 'layercake';
import { histogram, extent } from 'd3-array';
import Column from './components/Column.svelte';
import AxisX from './components/AxisX.svelte';
import AxisY from './components/AxisY.svelte';
import thresholds from './modules/thresholds.js';
import data from './data/unemployment.js';
const xKey = ['x0', 'x1'];
const yKey = 'length';
let binCount = 40;
const domain = extent(data);
$: hist = histogram()
.domain(domain)
.thresholds(thresholds(domain, binCount));
$: bins = hist(data);
</script>
<style>
/*
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: 100%;
}
input {
height: auto;
}
</style>
<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}
/> <span class="counter-container" style="display:inline-block;vertical-align:top;width: 70px;text-align:right;">{binCount} bins</span>
</div>
<div class="chart-container">
<LayerCake
padding={{ top: 20, right: 5, bottom: 20, left: 30 }}
x={xKey}
y={yKey}
yDomain={[0, null]}
data={bins}
>
<Svg>
<AxisX
gridlines={false}
baseline={true}
snapTicks={true}
/>
<AxisY
gridlines={false}
ticks={3}
/>
<Column
fill={'#fff'}
stroke={'#000'}
strokeWidth={1}
/>
</Svg>
</LayerCake>
</div>
<script>
import { getContext } from 'svelte';
const { data, xGet, yGet, yRange, xScale } = getContext('LayerCake');
$: columnWidth = d => {
const vals = $xGet(d);
return Math.max(0, (vals[1] - vals[0]));
};
$: columnHeight = d => {
return $yRange[0] - $yGet(d);
};
/* --------------------------------------------
* Default styles
*/
export let fill = '#00e047';
export let stroke = '';
export let strokeWidth = 0;
</script>
<g class="column-group">
{#each $data as d, i}
<rect
class='group-rect'
data-id="{i}"
x="{$xScale.bandwidth ? $xGet(d) : $xGet(d)[0]}"
y="{$yGet(d)}"
width="{$xScale.bandwidth ? $xScale.bandwidth() : columnWidth(d)}"
height="{columnHeight(d)}"
{fill}
{stroke}
stroke-width="{strokeWidth}"
/>
{/each}
</g>
<script>
import { getContext } from 'svelte';
const { width, height, xScale, yScale, yRange } = getContext('LayerCake');
export let gridlines = true;
export let formatTick = d => d;
export let baseline = false;
export let snapTicks = false;
export let ticks = undefined;
export let xTick = undefined;
export let yTick = 16;
export let dxTick = 0;
export let dyTick = 0;
$: isBandwidth = typeof $xScale.bandwidth === 'function';
$: tickVals = Array.isArray(ticks) ? ticks :
isBandwidth ?
$xScale.domain() :
typeof ticks === 'function' ?
ticks($xScale.ticks()) :
$xScale.ticks(ticks);
function textAnchor(i) {
if (snapTicks === true) {
if (i === 0) {
return 'start';
}
if (i === tickVals.length - 1) {
return 'end';
}
}
return 'middle';
}
</script>
<g class='axis x-axis'>
{#each tickVals as tick, i}
<g class='tick tick-{ tick }' transform='translate({$xScale(tick)},{$yRange[0]})'>
{#if gridlines !== false}
<line y1='{$height * -1}' y2='0' x1='0' x2='0'></line>
{/if}
<text
x="{xTick || isBandwidth ? $xScale.bandwidth() / 2 : 0 }"
y='{yTick}'
dx='{dxTick}'
dy='{dyTick}'
text-anchor='{textAnchor(i)}'>{formatTick(tick)}</text>
</g>
{/each}
{#if baseline === true}
<line class="baseline" y1='{$height + 0.5}' y2='{$height + 0.5}' x1='0' x2='{$width}'></line>
{/if}
</g>
<style>
.tick {
font-size: .725em;
font-weight: 200;
}
line,
.tick line {
stroke: #aaa;
stroke-dasharray: 2;
}
.tick text {
fill: #666;
}
.baseline {
stroke-dasharray: 0;
}
</style>
<script>
import { getContext } from 'svelte';
const { padding, xRange, xScale, yScale } = getContext('LayerCake');
export let ticks = 4;
export let gridlines = true;
export let formatTick = d => d;
export let xTick = 0;
export let yTick = 0;
export let dxTick = 0;
export let dyTick = -4;
export let textAnchor = 'start';
$: isBandwidth = typeof $yScale.bandwidth === 'function';
$: tickVals = Array.isArray(ticks) ? ticks :
isBandwidth ?
$yScale.domain() :
typeof ticks === 'function' ?
ticks($yScale.ticks()) :
$yScale.ticks(ticks);
</script>
<g class='axis y-axis' transform='translate({-$padding.left}, 0)'>
{#each tickVals as tick, i}
<g class='tick tick-{tick}' transform='translate({$xRange[0] + (isBandwidth ? $padding.left : 0)}, {$yScale(tick)})'>
{#if gridlines !== false}
<line
x2='100%'
y1={yTick + (isBandwidth ? ($yScale.bandwidth() / 2) : 0)}
y2={yTick + (isBandwidth ? ($yScale.bandwidth() / 2) : 0)}
></line>
{/if}
<text
x='{xTick}'
y='{yTick + (isBandwidth ? $yScale.bandwidth() / 2 : 0)}'
dx='{isBandwidth ? -5 : dxTick}'
dy='{isBandwidth ? 4 : dyTick}'
style="text-anchor:{isBandwidth ? 'end' : textAnchor};"
>{formatTick(tick)}</text>
</g>
{/each}
</g>
<style>
.tick {
font-size: .725em;
font-weight: 200;
}
.tick line {
stroke: #aaa;
stroke-dasharray: 2;
}
.tick text {
fill: #666;
}
.tick.tick-0 line {
stroke-dasharray: 0;
}
</style>
export default function thresholds (domain, count) {
const breaks = [domain[0]];
const brek = (domain[1] - domain[0]) / count;
while (breaks[breaks.length - 1] < domain[1]) {
const node = breaks[breaks.length - 1] + brek;
breaks.push(node);
}
return breaks;
}
export default [5.1,4.9,8.6,6.2,5.1,7.1,6.7,6.1,5,5,5.2,7.9,11.1,5.9,5.5,5.6,6.5,7.7,5.7,6.7,5.7,4.8,5.6,9.5,5.7,4.7,6.3,5.7,6.6,5.5,5.4,9.3,7.6,6.3,5.6,5.9,5.5,5.2,6,6.4,4.9,5,10.3,7.2,4.9,6.9,6.1,5.1,6.5,8.6,5.6,5.2,10.9,6.7,6.4,5.7,5.3,5,4.2,7.3,6.4,5.1,5.5,7.2,8.3,13.9,7,1.9,2.2,5,14.1,5.6,3.2,8.1,4.9,5.9,7.3,3.6,6.9,4.4,4.8,21.7,9.2,7.4,13.6,6.9,16.5,5.7,9.4,3,3,8.7,5.4,5.4,5.8,16.4,11.8,6.5,6.4,7.6,7.3,7.7,6.6,4.9,7,8.5,5.4,5.9,13,5,24.4,3.2,6.3,4.1,2.7,3.3,5.9,5.1,2.8,6,4.5,5,5.7,4.4,5.7,5.9,3.1,3.7,4.4,3.9,5,5.1,5.7,3.7,3.9,3.9,4,3.2,4,3.7,3.6,3.4,5,5.3,5.9,5.9,4.8,6.2,4.5,4.5,4.9,5.1,4.4,3.2,3,3.8,4.3,7.1,4.5,4.6,3.7,3.6,5.6,4.4,5.5,3.8,4.1,4.7,4.7,3.7,3.5,4.6,5,3,3.7,4.3,3.5,4.8,5.2,4.8,5.6,6.4,2.6,4.8,5.3,4.4,4.6,7.3,5.7,6.6,5.7,10,4.7,7.3,5.1,8.7,7.9,5.1,26.4,4.9,9.7,8.9,6.3,6.1,5.3,8.2,3.5,5.4,5,9.2,6.6,5.2,5.6,4,4.8,4.3,4.7,7.1,6.9,5.7,6.2,6.2,5,3.5,7.7,4.5,3.2,4.8,4,5.7,6.8,6.6,7.1,5.7,4.1,7.9,7.9,7.4,5.9,10.6,6.1,5.7,5.5,8,3.6,4.3,3.2,3.1,1.8,3.1,2.9,3.1,2.4,2.7,3.3,4.9,4.8,3.6,3,4.7,3.2,4.1,2.8,2.5,2.6,3.9,5.1,3.3,2.6,2.3,2.1,2,6.2,2.3,3.1,2.1,1.8,2.6,2.9,2.9,5,2.5,3.3,5.3,1.7,3.6,4.5,3.9,3.5,4.6,3.2,2.7,2.3,2.7,3.5,4.9,5.1,5.1,2.6,5.9,2.4,2.4,2.2,2.1,3.7,2.1,3.5,2.2,5.2,6,4.8,4.8,6.1,5.4,4.8,5.8,5.1,4.5,3.7,6.5,4.4,4.7,4.6,4.2,5.2,4.6,5.9,5.3,6.8,4.4,5.3,4.8,6.1,5.3,5.1,5,5.4,4.1,6.3,5.1,6.9,4.3,4.4,7.2,11.5,6,6.9,4.5,5.6,6.6,5.4,5.3,3.8,4.7,4.7,4.7,5.2,5.4,5.3,4.6,5.9,5,5.6,3.1,4.6,3.9,5.8,4.3,5,5.1,5.1,4.3,5.8,6,3.6,6,4.6,4.5,4.2,6.7,5.1,5.5,4.6,5,4.1,4.1,5,6.9,4.6,5.2,8.3,7.2,4.8,4.6,5,8.1,6.1,5.7,7.6,6.6,4.8,4.8,5.6,7.5,5.2,6,5.7,4.7,5.9,4.8,5.8,5,8.6,6.1,4.1,5.4,9.6,6.4,6,4.4,5.6,5.3,4.8,5.2,4.9,5.5,5.9,5.1,4.5,6.5,5.2,7,5.5,6.8,5.3,6.7,4.5,4.7,6.2,7.4,4.8,5,4.7,5.9,4.1,5.5,5.2,5.4,6.3,5,5.3,5.4,5.9,4.6,5,4.4,8.9,5.6,4.7,5.3,5.8,5.4,5.3,7.3,4.1,4.7,6.3,7,7.1,6,4.6,6.4,5.3,6.4,4.8,5.7,5.7,5.6,5.2,5,7.2,5.5,7.6,4.7,6.9,6.8,5.5,6.3,4.9,7.1,4.8,6.6,6.6,5.8,4,4.5,4.5,6.4,4.8,5.3,5.1,5.7,5.6,6.8,7.7,5.4,8.6,6.5,5.5,6.4,6.9,7.5,6.5,5.9,5.8,7.4,6.6,6.6,5.4,7,7.7,6,6.3,5.6,7.3,6.3,7.3,5,6.4,8.2,4.5,6.2,5.3,4.7,5.4,7,6.3,6.6,8.6,8.5,4.4,5.7,6.8,6.7,6,5.8,4.1,3,3.4,3.4,3.5,4.9,3.6,3.4,4.6,3.7,2.8,4.9,4.3,3.2,4.1,3.7,2.6,4.4,3.2,2.9,3.3,5.9,4.1,4.2,2.9,3.2,4.3,3,4.8,3.1,2.8,4,3.2,4.8,6.9,3.6,2.9,3.1,3.1,3.1,3.7,4.1,4.2,5.9,2,3.4,4.2,5.3,4.7,9.5,4.7,5.8,3.2,5.8,5.7,4.8,4.8,5,5.8,5.5,6.4,4.1,6,5.7,5.6,5,5,5.6,4.6,4.4,6.1,5.2,4.5,6,5.3,8,6.9,7.6,5.3,5.9,6.1,6.9,8.1,5.8,5.4,4.9,5.5,6.2,6.5,5.5,4.4,8.3,5.1,6.1,4.7,5.6,4.8,6.2,7.6,4.8,5.2,5.1,6.8,4.6,5.1,6.6,5.5,6,6.2,5.9,7.1,7.4,3.9,5.3,3.9,6.3,4.6,4.5,5.3,6.6,6.9,4.8,4.4,6.8,8.6,5.2,4.8,5.8,6,6.2,8.1,4.6,4.9,4.3,5.6,6.7,5.6,6,7.1,7.1,6.5,5.2,3.8,8.4,6.2,5.8,5.4,6.2,6.4,4.9,3.8,4.3,3.6,4.3,5.7,3.6,3.8,4.4,4.7,4.4,5,4,5.6,3.6,4.7,3.6,4.2,5.5,3.3,4,5.9,4.4,5.9,4.2,4.8,3.8,5.1,6.6,3.4,4,4.4,3.6,4.7,4.8,4.2,4,5.1,4.7,5,4.8,3.8,4.5,4,3.7,6.6,6,5.6,4.9,4.7,3.9,4.1,4.8,5.1,4.1,4.2,5.3,4.2,4.9,5.2,5.4,5.1,4.9,4.6,5.3,4.3,4.6,4.5,4.5,4.5,4,5,4.9,4,4.2,5.2,3.8,6.1,5.3,4.3,3.8,4.2,4.4,6.5,5.7,4.5,5,4.4,4.6,4.9,3.6,3.9,4,3.4,2.9,4.9,5.7,3.7,4,5.8,3.4,4.2,4.6,4.4,4.5,4.7,3.1,3,3.8,4.4,4.1,4.6,3.4,4.1,4.2,6.1,5.2,3.2,5.3,3.5,3.7,5.9,3.5,4,4.2,5,3.9,3.8,4.1,4.3,3.7,3.6,4,3,4.2,3.7,4.4,3.6,3.2,2.8,3.2,4.5,4,4.6,3.2,4.4,5.1,3,8.1,4.3,4.5,3.8,2.3,3.7,4.3,3.4,4.9,4,3,4.6,5.4,4.2,4.4,3,3.1,6.4,3.9,2.9,3.4,4.1,3.8,4,3.7,3,5.4,3.2,2.4,2.9,4.2,3.9,4.4,4.9,7.4,3.8,3.5,4.6,4.7,4.1,3.6,4.2,3.5,4.5,6.9,4.6,7.4,4.4,5,5.7,4.2,4.6,4.6,5.9,5.2,3.3,3,4.8,5.1,8.2,3.2,5.1,5.4,4.7,4.7,4.7,4.1,3.3,6.8,3.4,4.3,3.5,3.6,4.8,6.4,3,5,3.9,2.6,2.7,5.7,3.2,4,6.3,2.8,2.7,4,4.1,4.5,3.7,3.7,4.8,3.5,6.2,3.9,4.5,4,7,3.2,4.3,3.9,5.9,3.6,2.9,4.3,3.1,6.9,4.3,4.6,3,8.1,4.1,2.9,4.6,4.1,4.5,3.6,3.6,4.1,5,2.6,5.2,3.2,4.8,3.7,5.5,4.7,4.6,4,2.7,5.2,4.9,4.5,2.9,3.8,3.7,5,3.3,4.7,4.9,3.2,4.2,3.8,3.3,3.9,2.6,6.9,6.9,6.1,6.1,3.9,3.6,9,4.3,6.5,8.3,3.5,4.6,8.3,4.5,5.4,8.3,5.7,3.8,4.8,5,4.1,3.5,6.8,5,10.6,4.4,6,4.5,9.7,6.4,5.2,4.6,4,5.4,11.7,5.2,3.3,5.5,10.4,3.6,6.6,4.4,4.3,4.2,6.4,6.2,4,8.8,4.7,4.1,11.6,4.4,4.4,4.5,3.9,5.1,5.5,6.9,4.2,3.6,9.2,3.8,10.5,7.5,3.9,5.8,10.6,8.3,13.2,11.8,8.4,5.6,6.7,4.2,5.6,5.7,7.3,4.5,3.8,16.3,4.3,5.5,9,6,4.7,7.1,4.4,3.8,3.6,6,6.8,6.7,4.3,4.9,6.3,3.1,3.8,8.7,4.3,10.4,10.3,6.9,5,6.1,5.3,5.3,7.6,3.6,3.3,4.2,3.5,4.8,3.9,5,5.4,6.4,3.5,4,6.8,5.5,6.4,9.5,3,7.9,7.5,5.3,9,7.8,6.7,8,5.9,7.4,5.5,8.4,4.8,9.6,7.5,9.2,8,5.7,11.8,6.2,8.5,9.6,7.8,9.7,7.4,6.3,5.9,6.7,6.7,6.7,6.7,7.5,5.3,9.4,10.4,8.1,6.7,6.7,5.9,7.2,6.9,6.8,7.7,7.3,6.9,6,8.5,8.1,7.5,8.9,8.3,10.1,5.7,7.5,10.5,7.3,6.9,7.9,8.1,7.9,9.4,6.1,12,5.5,8.5,3.2,4.8,2.6,4,3.2,3.2,2.7,2.9,4.2,4,4.8,2.6,4.9,3.6,4.6,2.9,6.4,4,4.7,4.1,4.8,3.8,5.3,4.7,6.2,3.9,5.2,4.3,3.4,4.7,3.4,4.6,3.8,4.5,6.5,4,5.2,5.5,5.8,6.9,3.4,3.9,4.7,2.7,3.9,3.3,5.3,3.6,3.2,1.8,3.4,4,3.7,4.1,5.8,6.1,3.3,5,5,6.3,6.8,3.5,4.7,4.6,4.4,4.4,4.4,4.2,3.7,4,6,6,3.4,6.2,5.5,4.5,3.6,4.1,5,5.8,5.5,3.4,4.5,4.9,5.2,4.3,4,3.6,5.8,4.7,4.2,4.6,3.7,5.4,3.2,6.4,6,6.4,3.5,4.4,4.6,4.4,3.1,5.9,4.9,4.9,4.2,4.9,5.1,4.1,4.8,4.3,4.5,7.6,4.8,4.2,4.7,5,6.3,6.6,4.9,5.6,4.9,3,6.6,6.8,4.6,6.5,3.7,5.2,7,4.6,5.3,4.6,3.5,7.3,5.1,5.1,3.8,3.8,4.8,3.7,4,3.3,3.9,4.9,3.4,5.6,4,3.9,3.2,7.6,3.1,7.9,4.3,3.5,3.6,3,3.9,3.7,3.7,3.7,4.1,3.5,3.4,5.5,4.2,7.7,4,5.1,3.5,4.2,7.7,3.9,4.3,4.5,3.7,3.2,3.4,4.1,5.2,5.6,3.9,4,4.8,4.5,3,3.3,2.9,3.6,4.6,3,3.6,4.3,4.8,3,4.4,2.8,3.8,6.3,4,5.2,3.6,2.2,4.3,5.7,3.2,3.6,3.7,3.5,3.8,2.7,4.8,3.9,3,3.2,5.1,4,3.4,5.1,3.4,3.7,3.5,3.7,8.2,5,7.1,6.5,6.5,7.4,5.2,7.3,6.3,5.3,12.3,6.4,7.8,8.1,6.4,5.6,4.1,5.8,6.8,7.7,8,4.9,5.9,5.3,5.2,10.9,11.2,9.9,4.8,6.4,7.8,15.4,9.3,5.9,8.2,4.9,4.5,5.8,7.4,5.6,4.8,9,5.8,5.9,4.2,6.8,5.7,6.3,6.3,5.4,5.9,8,5.6,6.7,5.9,7,6.7,4.5,5.3,8.3,3.8,4.5,8,5.5,5.1,6.8,8.4,5.7,5.4,5.2,5.1,6.1,4.2,7.9,6.4,9.2,7.6,6.1,10.1,7.4,6,7,6.7,4.5,5.9,5.1,5.3,6,6,7.3,6.2,4.1,4.9,6.9,5.6,5.2,5.5,5.3,5.9,7.8,5,6.4,5.1,4.5,8.7,4.5,5,4.6,5.7,5.9,5.6,6.5,4.6,5.1,6.6,7.3,9.1,4.9,5,4.7,4.6,5.6,4.7,5.9,6.6,4,5.4,7.2,8.4,6,5.2,4.9,6.1,4.1,6.2,4.9,5.4,4.9,4.8,9,4.5,4.9,6,6.9,6.8,5,5,5.4,7.7,4.9,5.5,5.1,6.4,9.9,5.5,6,7,4.2,8.8,9.9,4.3,6.1,5.6,5.4,4.4,6.4,6.8,5.1,4.4,6.6,5.5,8.1,8.4,4.1,7.3,5.8,6.7,5.1,5.8,7.6,4.6,6.9,8,4.8,7.1,6,7.4,6.1,7.6,5.8,4.6,7.2,6.1,5.9,3.6,7.3,6.6,2.9,7.7,4.4,4.3,3.5,2.4,3.8,3.6,3.7,2.3,4,4.2,3.1,3.3,4.8,2.3,2.4,9,3.2,5.5,4.9,4.5,2.7,4.8,3.3,3.1,7.9,2.1,3.1,4.2,7.1,3.5,4.3,3.3,3.1,4.6,4.7,2.5,4.5,3,4.5,4.9,6.2,6.8,7,3.2,4.3,3.9,2.9,3.5,3.3,4.1,3,4.9,4.6,3.7,3.3,2.5,5.4,4.2,4.1,2.8,3.6,2.8,3.5,2.8,3.6,3.2,3.5,2.8,2.5,2.5,3.3,3,3.2,3.2,2.6,4.5,3.4,3,3.4,3.4,3.3,3.5,2.5,2.8,3.3,2.8,3.3,3.5,3.2,2.7,2.7,2.6,3.7,3.4,2.9,2.9,2.8,4.1,3.1,2.7,2.9,2.7,3.1,2.4,3,2.3,4.3,2.8,3,3.2,3,3.7,2.5,3,3.7,3.5,2.9,4.3,3,3.6,2.4,2.5,2.8,2.5,3.5,2.7,3.2,3.3,2.6,3.1,3.1,3.2,3.8,3.1,3.4,3.3,2.6,2.7,2.8,3.2,4.6,2.9,3.2,3.4,3.7,2.7,2.9,5.8,6,5.3,4.4,4.7,5.1,5.5,5.9,5.3,7.3,8.6,7.5,6,5.8,4.9,4.6,6,2.6,2.8,2.9,3.5,2.4,3.2,2.6,3.1,2.7,2.5,7.1,4.7,5,6,5.7,7.9,6.6,5.6,5.2,4.1,4.9,4.9,4.8,4.2,5.4,6.8,6.8,4.4,5,5.6,5.1,6.2,6.9,6.9,9.1,5.6,5.4,5,7.1,7.2,6.6,6.4,7.3,5.4,9.8,6,4.5,10,9.8,8,6.4,7,7.3,6.1,7.1,9.4,8.1,5.5,7.8,8,8.3,9.3,4.5,7.6,4,4.9,7.8,5,5.2,4.4,5.1,5.2,4.4,5.1,3.3,4.6,4.9,4,4.6,4.1,4.8,5.2,3.8,4.5,2.9,4.4,5.1,5.9,5.4,4.2,4.6,4.6,5.2,3.8,4.9,5.2,4.3,4.2,3.7,4.2,5.2,5.7,4.3,3.9,5,4.1,5.9,4.1,5.8,3.5,4.2,4.7,4.6,3.8,5,4.3,4.1,4.5,3.7,4.3,4.1,3.8,4.5,4.2,4.1,3.7,4.8,4.5,5.1,5.9,4.5,4.8,5.6,6.4,6.7,5.7,3.9,5.1,4.6,5.3,5.3,4.7,5.5,4.9,4.3,5.4,6.5,5.1,5.6,6.1,5.1,6.3,4.6,4.2,4.9,4.6,5.4,4.5,8.5,4.9,5.1,5.3,5.2,7.1,4.4,5,5.3,7.8,5.8,4.4,4.3,6.5,6.5,6.4,4.7,5.1,4.5,5.1,5.7,5.4,4.6,4.6,5.1,4.9,6.8,4.7,6,5.2,5,6.8,4.7,7.3,5.4,4.5,5.1,6.2,5.2,6.3,5.4,5.7,4.9,4.8,6.9,7.3,5.5,5.5,6.6,5.6,8.9,4.7,4.9,4.8,4.9,4.8,6.2,4.4,7.3,4.2,7,6.9,4.7,5.6,4.7,8.1,4.4,5.1,2.3,3.2,3.1,2.5,3.2,1.8,3.8,2.3,2,1.9,1.8,2,2.2,2.8,3.1,2.5,2.4,2.3,2.1,2.3,2.9,2.6,2,2.9,4.1,2.4,3.1,3.1,4.5,2.9,2.9,2.9,5.3,4.5,3,2.5,1.9,3.5,2.7,14.2,1.6,3.7,5.3,2.3,3.3,1.7,2.1,2,2.7,3.6,3.5,2.7,3.7,6.8,4.6,4.3,5.3,6,3.5,6.3,5,4.2,6,4.1,4.7,4.1,5.4,6,6.2,5.5,5.5,3.7,4.3,3.4,4.6,3.9,3.9,3.9,4,6.4,4.4,4.2,5.8,4.2,3.5,4.9,6.4,4.2,5.5,4.5,3.3,5,7,7.4,4.1,4.8,6.1,4.1,3.9,5.9,4.9,3.5,5.8,4.7,4.3,7.6,3,4,9.1,4.6,6.8,4.4,5.3,7.3,4.6,4.2,5.5,4.2,6.8,4.5,4.3,3.2,4.9,4.8,4.1,7,4.4,3.7,4.9,4.7,6,5,3.5,3.7,5.9,3.9,6.4,3.6,4.1,4,3.4,5.8,3.6,7.1,3.2,7.7,3.7,4.3,5.6,4.3,5.4,5.6,8.3,2.7,4,7.5,4.8,5.2,4.9,6.3,4.9,5.2,4.1,3.7,4.5,5.7,5.2,3.1,7.9,3.6,4.3,8.8,7.5,4.9,8,6.5,6.7,3.6,5.6,9.7,7.4,5.5,4.3,3.3,4.3,7.7,9.5,4.3,5.1,5.5,4.3,6,4,6.5,6.1,4.5,7.4,6.1,5.3,7.1,3.9,6.5,4.2,5,7.7,5.4,5.6,7.3,6.5,10.4,3.5,4.5,5.2,5.2,5,7.2,3.3,6.4,6.7,5,5.2,5.1,7.1,7.3,6.9,7,5.1,7.3,7.1,6.1,5.9,4,6.8,6.6,7.4,7.2,5.7,6.2,5.9,6.7,6.1,5.9,5.8,5,6,4.3,5.2,5.9,6.3,5,5.9,5,4.9,5.4,4.5,5.9,8,6.8,5.8,5.6,5.7,6.5,5.2,5.7,7.7,8.2,6.7,4.8,4.6,7.2,7.5,7.3,6.2,6.7,4.7,5.3,5.6,6.7,7.1,8.5,8.5,5.7,6.3,8.1,7.1,8.3,7.3,5.8,6.4,4.8,7,5.1,6.3,6.9,7,7.2,6.8,6,6.9,4.7,4.9,5.9,6.6,5.1,7.7,6.8,7.8,6.7,5.1,7.5,7,5.4,7.4,5.4,8,5.9,6.6,5.6,6.6,6.2,5.2,5,5.3,4.8,6.3,5,6.1,5.6,9.1,5.2,11.4,8,5.1,5,7.4,4.5,6.6,8.4,5.7,7.1,5.8,6.8,7.1,4.9,6.1,7.7,5.8,6.6,4.7,5.8,6.2,5.4,4.7,5.8,6,5.6,8.2,4.5,5.8,8.6,9.1,4.8,5.5,11.3,5.6,5.4,4.8,5.3,6.5,6.5,7.9,5.2,1.9,2.3,4,2.4,2.5,2.4,2.5,9.8,2.9,2.5,3,2.9,2.7,2.6,5.5,3.1,1.9,3.6,3.2,14.1,2.2,2.1,3.8,2.5,2.5,2.6,2.1,2.4,1.9,3.2,2.1,2,2,2.8,2.8,2.4,2.4,2.1,3,2.9,1.8,5,2.1,3.6,2.8,2.7,3.8,2.4,2.2,3.6,13.2,2.6,2.8,2.3,3.3,2.5,2.6,2,1.9,6.8,1.9,2.4,2.9,4.3,2.3,5.6,5.1,5.3,7.4,6.6,4.5,4.7,6.7,4.9,7.1,5.9,4,5.7,6.4,6.4,6,4.9,5.2,5.9,3.8,7.3,5.8,4.4,6.1,5.3,6,5.7,6.2,4.3,5.4,5.8,6.6,5.3,5,8,6.2,6.2,5.5,6.5,7,6,4.6,7.7,6.2,7.3,5.4,4.9,4.3,7.3,7.8,5.9,5.8,4.4,4.8,5.8,7.4,4.5,5.3,6.7,4.8,4.2,7.2,5.5,5.5,4.2,6.6,7.5,5.6,6.2,5.7,5.8,5.2,7.5,5.8,4.4,4,7.4,6.1,4.2,5.8,4.6,6.8,5.5,4.1,5.9,4.9,6.9,5.9,5.8,4.8,5.1,6.2,7.3,5.4,3.7,4,4.8,4.9,6.6,5.9,4.5,3.5,5.7,5.9,4.6,4.3,4.1,3.5,8.5,4.8,4.1,3.3,3.4,4.7,5.4,5.7,3.9,4.3,4.8,12.5,4.8,5.2,3.8,4.5,5.5,4.6,7.6,7.8,3.5,8.2,3.5,6.8,5.5,3.5,4.5,6,3.9,6.4,3.8,3.6,5.3,4.2,4.6,3.2,4.2,4.9,5,9.1,6.7,5.1,4.1,2.5,4.2,6,3.5,4.3,3.7,6,5.7,7.4,5.3,12.1,5.7,6.8,5.2,4.1,5.4,4.7,4.6,4.1,4.1,4.7,5.5,4.6,5.7,5.5,7.2,5.4,3.7,5.9,3.8,3.1,4.3,5.7,4.6,7.3,4,6.8,7.6,4,6.4,8.2,5.3,3.2,4.2,6.8,5.8,6.7,2.1,5.1,3.7,3.8,5.3,8.4,4.8,5.1,5,4.5,5,6.1,7,4.5,6.7,3.3,5.2,5.3,8.8,2.9,7.6,9.9,11.3,4.7,6.2,5.3,4,3.6,5.4,2.9,3.9,3.9,3.6,6.6,7.9,5.3,5.4,7.1,4.6,5.7,4.7,4.2,7.3,8.5,6.2,5.1,5.5,4.3,4.4,3.7,4.5,5.1,4.4,2.2,4.8,7.7,4.8,3.7,7.6,11.4,4.8,5,4.6,5.6,4.6,7.3,5.1,5.5,3.2,13.1,3.9,5.5,4.6,7.9,5.1,5.9,5.4,3.4,7.5,5.9,7.5,4.3,2.8,5.9,7.1,3.6,11.9,4.5,3.2,7.7,5.3,6.6,6.1,7.4,4.9,5.5,3.9,4.8,6.4,9.8,9.6,6.9,7.8,3.9,5.9,6.3,4,6.5,3.4,5.1,5.1,14.1,5.9,3.8,4.9,8.5,4.7,4.2,4,4.1,5.5,4,7.2,4.7,3.4,6.7,8.2,7.3,5,5.6,6.7,4.6,5.7,6.2,6.4,5.8,5.6,5.2,5.4,4.4,4.6,5.4,13.3,3.6,4.2,8.5,5.1,5.8,5,4.8,11.2,17.3,6.1,3.3,3,6.1,3.4,3.1,8.6,5.9,5.3,3.5,4.6,3.4,2.8,3.2,2.8,4.8,2.2,3.2,7.3,4,4.2,2.9,3.9,9.8,3.1,3,3.5,5.3,3.7,3.1,4,4.2,2.7,5.2,3.2,3.7,3.7,2.9,4.5,4,3.1,3.3,3.1,4.3,3.6,4.9,4.3,4.6,4.7,2.6,3.6,3.6,4.1,6.4,3.5,5.9,10.9,5.1,4.5,4.3,5.9,4.4,5.2,3.8,3.3,4.4,3.8,4.6,10,4.8,4.7,3.2,3.4,4.4,3.4,4.3,3.4,6.9,3.6,3.6,5.2,3.2,5.1,6.2,3.5,3.9,5.4,3,4.4,3.8,4.2,4.1,3.7,4.4,6.9,3.2,3.7,4.6,3.1,3.8,5.6,3.7,4.5,3.5,3.3,5,4.4,4,3.9,4.5,4.5,4.9,3.6,5.6,4.9,3.6,10,3.5,3.3,3.6,4.3,3.6,6.5,4.6,3.6,5.6,3.8,4.1,4,5.6,5.9,8.1,3.9,4.6,4.2,8.7,7,4,2.9,5.2,5.1,3.5,4.4,4.5,5.8,6.6,6.4,3.1,2.7,5.9,4.7,5.1,5.7,5.2,6.5,7.4,5.5,3.5,3.5,6.8,5.1,5.4,7.2,7.4,3.6,6.2,6.7,4.7,4.4,4,3.9,4.7,4,4.1,5.9,3.9,4.8,4.7,6.5,5.1,7.6,6.6,5.9,7.6,6.6,9.8,6.5,5.3,6.6,8.7,6,7.2,3.9,5.9,5.8,6.5,8.1,4.1,8.3,6.1,7.7,8.9,6.5,3.9,6.7,6.7,4.3,6.3,7.9,5.9,8.4,5.6,6.3,5.5,7.3,5.8,4,8.5,6.9,6.5,4.8,8.5,9.1,4.9,6.8,6.8,6.1,4.5,4.1,6.5,5.3,5.4,5.9,3.4,5.2,7.1,7.4,10,13.1,6,7,7,6.7,6,11.7,4.5,4.5,4.5,8.5,5.3,3.5,7.5,5.1,5.2,4.6,6.3,5.3,5.9,8.5,5.5,5.2,4.8,8.1,7,6.3,8.2,8.1,8.1,5.7,9.4,5.6,5.1,3.9,5.8,3.6,4.2,4.9,3.4,3.6,3.2,3.3,4.3,2.8,3.7,3.4,5.2,3.8,3.4,5.5,3.6,6.2,3.7,3.1,3.9,3,7,3.7,3.9,4,4.8,3.1,3.7,2.9,5.4,4.3,4.3,3.4,5.2,4.7,8.6,5.5,3.5,3.9,4.3,3.5,3.4,3.2,3.8,3.8,3.5,3.8,5.3,3.4,4.3,4.5,3.5,3.1,5.6,3.9,3.3,3.5,3.4,3.1,4.5,4,4.6,3.4,3.6,3.7,4.6,3.7,4.7,3.3,4.4,6.8,4.1,6,4,6.6,3.3,4.3,4.4,4,3.8,6.8,3.3,3.7,4.6,4,5.4,5.7,2,5.3,4.5,4.9,15.7,14.5,14.9,14.5,15.1,13,13.7,18.7,15,14.1,9.2,12.9,10.7,12.8,12.4,8.8,9.9,11.2,13.4,16.9,10.6,19.5,13.7,12.6,3.8,8.5,13.8,15.4,17.9,17.3,18.1,6.3,9.2,14.1,12.7,14.2,14.3,12.5,15.8,13.4,18.8,17.8,13.7,14.7,12.7,15,12.2,13.7,17.7,14.5,15.6,14.3,12.8,13.6,15.4,20.6,16.9,13.8,16.1,13.3,11.5,16.5,23.4,15.4,8.2,13.2,18.1,20.6,8.9,9.1,7.6,15.3,12,14.3,11.3,19.6,16.6,18];