chart = {
const data = Array.from(reshapedDataset.get(speciesTypes))
const svg = d3.create('svg')
.attr("viewBox", [0, 0, dimensions.width, dimensions.height])
const bounds = svg.append("g")
.attr("transform", `translate(${dimensions.margin.left}, ${dimensions.margin.top})`)
const box = bounds
.selectAll("g")
.data(data)
.join("g")
bounds.append("g")
.attr("class", "axis")
.call(xAxis)
bounds.append("g")
.attr("class", "axis")
.call(yAxis)
box.append("line")
.attr("class", "whisker")
.attr("x1", ([metric, data]) => xScale(metric) + bandwidth/2)
.attr("x2", ([metric, data]) => xScale(metric) + bandwidth/2)
.attr("y1", ([metric, data]) => yScale(data.range.r1))
.attr("y2", ([metric, data]) => yScale(data.range.r0))
box.append("path")
.attr("class", "whisker")
.attr("d", ([metric, data]) => `
M${xScale(metric) + bandwidth/4},${yScale(data.range.r0)}
H${xScale(metric) + bandwidth - bandwidth/4}
`);
box.append("path")
.attr("class", "whisker")
.attr("d", ([metric, data]) => `
M${xScale(metric) + bandwidth/4},${yScale(data.range.r1)}
H${xScale(metric) + bandwidth - bandwidth/4}
`);
box.append("rect")
.attr("class", "box")
.attr("x", ([metric, data]) => xScale(metric))
.attr("y", ([metric, data]) => yScale(data.quartiles.q3))
.attr("width", ([metric, data]) => bandwidth)
.attr("height", ([metric, data]) => yScale(data.quartiles.q1) - yScale(data.quartiles.q3))
box.append("path")
.attr("class", "q2Line")
.attr("d", ([metric, data]) => `
M${xScale(metric)},${yScale(data.quartiles.q2)}
H${xScale(metric) + bandwidth}
`);
return svg.node();
html`
<style>
.axis line {
stroke: #ddd;
}
.axis .baseline line {
stroke-width: 0.6px;
stroke: #3e4989;
}
.axis .domain {
display: none;
}
.whisker {
stroke: black;
stroke-width: 1px;
}
.box {
fill: #31688e
}
.q2Line {
stroke: white;
stroke-width: 1px;
}
</style>
`
}