Я пытаюсь переместить столбчатую диаграмму с накоплением между двумя наборами данных, когда пользователь переключается между двумя входами переключателя. Затем функция регулирует положение x и ширину всех столбцов.
const bars = chart.append("g")
.selectAll("g")
.data(series1)
.join("g")
.attr("fill", d => colorScale(d.key))
.selectAll("rect")
.data(d => d)
.join("rect")
.attr("x", d => xScale(d[0]))
.attr("y", d => yScale(d.data.year))
.attr("width", d => xScale(d[1]) - xScale(d[0]))
.attr("height", yScale.bandwidth())
function transition(data) {
bars.selectAll("g")
.data(data)
.join("g")
.data(d => d)
.join("rect")
.attr("x", d => xScale(d[0]))
.attr("width", d => xScale(d[1]) - xScale(d[0]))
}
d3.selectAll("input")
.on("change", update)
function update() {
if(this.value === "two") transition(series2);
else transition(series1);
}
Поскольку метод d3.stack () вкладывает данные определенным образом, у меня возникают проблемы с доступом к внутреннему вложенному элементу. частей. Я пробовал множество вариантов удаления .join и .selectAll из функции перехода, но, похоже, не могу найти правильную структуру. Вот JSFiddle со всеми компонентами: https://jsfiddle.net/bronna217/ba71ndfp/59/