lineChart = (x, y, xLabel, yLabel, xDomain, yDomain) => {
const height = 240;
const margin = ({top: 20, right: 30, bottom: 30, left: 40})
const xScale = d3.scaleLinear()
.domain(xDomain || d3.extent(x))
.range([margin.left, width - margin.right]);
const yScale = d3.scaleSqrt()
.domain(yDomain || d3.extent(y))
.range([height - margin.bottom, margin.top]);
const xAxis = g => g.attr("transform", `translate(0,${height - margin.bottom})`)
.call(d3.axisBottom(xScale).ticks(10));
const yAxis = g => g
.attr("transform", `translate(${margin.left},0)`)
.call(d3.axisLeft(yScale).ticks(height / 20).tickFormat(d3.format(".0%")));
const line = d3.line().x(d => xScale(d.x)).y(d => yScale(d.y));
const data = x.map((_, i) => { return { x: x[i], y: y[i] } });
return html`<svg viewBox="0 0 ${width} ${height}">
<path d="${line(data)}" fill="none" stroke="steelblue" stroke-width="2" stroke-miterlimit="1"></path>
${d3.select(svg`<g>`).call(xAxis).node()}
${d3.select(svg`<g>`).call(yAxis).node()}
${d3.select(svg`<g><text x="${width-margin.right - 30}" y="${height - margin.bottom / 2}" style="font-size: 8pt; font-family: sans-serif; align: right;">${xLabel}</text>`).node()}
${d3.select(svg`<g><text x="${margin.left - 5}" y="${margin.top - 5}" style="font-size: 8pt; font-family: sans-serif">${yLabel}</text>`).node()}
</svg>`
}