Там нет границ, например в SVG, так что вы должны добавить прямоугольник, определяющий границу и назначить соответствующий стиль NVD3 не вариант для этого , но вы можете выбрать соответствующий элемент после того, как он b een draw и добавить новый контент.
d3.select(".nv-stackedWrap")
.append("rect")
.attr("width", chart.xAxis.scale().range()[1])
.attr("height", chart.yAxis.scale().range()[0])
.style("fill", "none")
.style("stroke", "black");
Это работает для диаграммы с разбивкой по областям; для других типов диаграмм имя класса выбранного элемента будет отличаться.
Установка границы в верхней области является обманчивой, поскольку SVG не позволяет установить ход только для одной стороны path
. Вы можете сделать это с stroke-dasharray
, однако - вам просто нужна общая длина пути.
d3.select(".nv-area-" + (data.length-1))
.style("stroke", "black")
.style("stroke-opacity", 1)
.style("stroke-dasharray", function() {
return this.getTotalLength()/2 + "," + this.getTotalLength();
});
Это выбирает последнюю (то есть верхнюю) область и устанавливает для нее ход. Указанный dasharray означает, что на половину path
(т. Е. Верх) будет нанесен штрих, а затем ничего не будет длина пути (чтобы он выглядел так, как если бы сверху был только удар).
Проблема с этим и NVD3 - это переход, который «увеличивает» области. Если вы запустите этот код при создании графика, длина строки может быть короче, чем будет в конце. Чтобы убедиться, что длина правильная, вам необходимо (повторно) запустить этот код после завершения перехода, например. используя setTimeout
.
Самый простой способ получить край вокруг пути просто использовать CSS, чтобы переопределить правило, которое делает ход (край) на пути прозрачной, то есть добавить правило CSS '.nvd3.nv-stackedarea path.nv-область {штрих-непрозрачность: 1;} '. Однако это также добавит границу внизу, которая выглядит немного странно в графах с уложенными областями. – AmeliaBR