viewof keyz = { const form = html`<form>${Object.assign(html`<select name=select>${keys.map(key => Object.assign(html`<option>`, {value: key, textContent: key}))}</select>`, {value:"Ükh"})} <i style="font-size:smaller;">color encoding</i>`; form.select.onchange = () => (form.value = form.select.value, form.dispatchEvent(new CustomEvent("input"))); form.select.onchange(); return form; }
viewof selection = { const svg = d3.create("svg") .attr("viewBox", [0, 0, width, height]); const brush = d3.brushY() .extent([[-20, margin.top], [20, height - margin.bottom]]) .on("start brush end", brushed); // Definiere Datenlinien const path = svg.append("g") .attr("fill", "none") .attr("stroke-width", 1.5) .attr("stroke-opacity", 0.4) .selectAll("path") .data(data.slice().sort((a, b) => d3.ascending(a[keyz], b[keyz]))) .join("path") .attr("stroke", d => z(d[keyz])) .attr("d", d => line(d3.cross(keys, [d], (key, d) => [key, d[key]]))); path.append("title") .text(label); // Zeichne Achsen svg.append("g") .selectAll("g") .data(keys) .join("g") .attr("transform", d => `translate(${x(d)},0)`) .each(function(d) { d3.select(this).call(d3.axisRight(y.get(d))); }) .call(g => g.append("text") .attr("y", 10) .attr("x", -10) .attr("text-anchor", "start") .attr("fill", "currentColor") .text(d => d)) .call(g => g.selectAll("text") .clone(true).lower() .attr("fill", "none") .attr("stroke-width", 5) .attr("stroke-linejoin", "round") .attr("stroke", "white")) .call(brush); const selections = new Map(); // Funktion zum Auswählen/Abwählen function brushed({selection}, key) { if (selection === null) selections.delete(key); else selections.set(key, selection.map(y.get(key).invert)); const selected = []; path.each(function(d) {-const active = Array.from(selections).every(([key, [min, max]]) => d[key] >= min && d[key] <= max);+const active = Array.from(selections).every(([key, [max, min]]) => d[key] >= min && d[key] <= max);//console.log(active); d3.select(this).style("stroke", active ? z(d[keyz]) : deselectedColor); if (active) { d3.select(this).raise(); selected.push(d); } }); svg.property("value", selected).dispatch("input"); } return svg.property("value", data).node(); }