linechart = (dataset, grouped_data, title, var_x, var_y, var_color, W, x_legend = var_x, y_legend) => {
if(W<500)
W = 500
const H = W/2 + W/10
const x_max_r = W-(W/5)
const y_max_r = H-(H/6)
const margin = {start: 15, bottom: 25, top: 50, end:50}
const y_range = [margin.top, y_max_r]
const x_range = [margin.start*2, x_max_r]
const translate = {x:H-margin.bottom,y:margin.start*2}
const svg = d3.create("svg").attr("width", W).attr("height", H)
const g = svg.append("g").attr("transform", `translate(${margin.start}, 0)`)
let sum = Array.from(d3.rollup(dataset, r => d3.sum(r, d=>d[var_y]), d => d[var_x]))
let yMax = d3.max(dataset, d => d[var_y])
const x = d3.scaleTime()
.domain(d3.extent(dataset, d=>d[var_x]))
.range(x_range)
const y = d3.scaleLinear()
.domain([yMax, 0])
.range(y_range)
const c = d3.scaleOrdinal(d3.schemeCategory10)
.domain(grouped_data.map(d=>d[0]))
const xAxe = g => g.attr("transform", `translate(0, ${y_max_r})`)
.call(d3.axisBottom(x))
g.append("g").call(xAxe);
const yAxe = g => g.attr("transform", `translate(${translate.y}, 0)`)
.call(d3.axisLeft(y))
g.append("g").call(yAxe);
// Lignes //////////////////////////////////////////////////////////////////////
let ligne = d3.line()
.x(d => x(d[var_x]))
.y(d => y(d[var_y]))
svg.selectAll("ligne").data(grouped_data)
.enter()
.append("path")
.attr("transform", `translate(${margin.start}, 0)`)
.attr("class", "line")
.attr("fill", "none")
.attr("stroke", d => c(d[0]))
.attr("d", d => ligne(d[1]))
// Legendes ///////////////////////////////////////////////////////////////////////
// Titres X et Y
svg.append("text")
.attr("text-anchor", "middle")
.attr("alignment-baseline", "middle")
.attr("font-weight", "bold")
.attr("font-size", W/70)
.attr("x", W/2 - margin.start)
.attr("y", y_max_r+margin.bottom)
.text(x_legend)
const titreY = svg.append("g").attr("transform", `rotate(-90,0,0)`)
titreY.append("text")
.attr("text-anchor", "middle")
.attr("alignment-baseline", "middle")
.attr("font-weight", "bold")
.attr("font-size", W/70)
.attr("x", -translate.x/2-margin.start)
.attr("y", margin.start/2)
.text(y_legend)
// Ajout du titre
svg.append("text")
.attr("text-anchor", "middle")
.attr("alignment-baseline", "middle")
.attr("stroke", "#3F3F3F")
.attr("x", W/2 - margin.start)
.attr("y", H-margin.bottom*0.75)
.attr("font-size", W/55)
.attr("font-style", "italic")
.attr("font-weight", "lighter")
.text(title)
// Clef ////////////////////////////////////////////////////////////////////////
const groups = Array.from(grouped_data)
g.selectAll("text.clefs").data(groups)
.enter()
.append("text")
.attr("class", "clefs")
.attr("font-size", W/70)
.attr("x", x_max_r + margin.end)
.attr("y", (d, i) =>margin.top + i * 20 + 8)
.text(d => d[0])
g.selectAll("rect.clefs").data(groups)
.enter()
.append("rect")
.attr("x", x_max_r + (margin.end/1.5))
.attr("y", (d, i) => margin.top + i * 20 )
.attr("width", 10)
.attr("height", 10)
.attr("fill", d => c(d[0]))
.attr("stroke", "black")
return svg.node()
}