Проблемы с текущим селектором
Ваш CSS селектор близок, но не совсем прав.
.nv-group:nth-child(2)
означает второй .nv-group
своего родителя. В вашем JSFiddle каждый .nv-group
является одним из цветных сегментов бара, и в этом случае второй .nv-group
содержит голубой (средний) сегмент бара от каждого бара ( т.е. средняя полоса от JJ, BB, ...).
Вместо этого нам нужно выбрать правильный бар из каждого .nv-group
.
d3.selectAll(".nv-group rect:nth-child(2)")
Это выбирает второй бар.
Еще лучше, мы можем сделать
d3.selectAll(".nv-group rect:nth-last-child(2)")
Это выбирает каждый второй бар.
Затем мы можем применить .width
или .attr
к этим выбранным объектам, но на самом деле это мало поможет.
Поскольку каждый бар располагается абсолютно относительно левой части графика, а не относительно бара перед ним, при перемещении одного бара мы создали бы странные промежутки между окружающими барами.
Возможные решения
1. Программно перемещать бары JSFiddle
Вы можете сделать это:
for ( let i = 1; i <= d3.selectAll(".nv-group:first-child rect")[0].length; i++) {
if (i % 2 == 0) {
const [xPosition, yPosition] = d3.selectAll(`.nv-group rect:nth-child(${i})`).attr("transform").match(/[0-9.]+/g);
d3.selectAll(`.nv-group rect:nth-child(${i})`).attr("transform", `translate(${xPosition - 5}, ${yPosition})`)
}
}
Приведенный выше код работает и успешно перемещается на каждом 2-м баре.
Диаграмма будет выглядеть странно, если вы попытаетесь создать пробел каждые 3 или более столбцов, потому что интервал будет несовместимым.
2. Используйте пробел в данных JSFiddle
var data = [
{
"key": "one",
"values": [
{"x": "JJ", "y": 0.8},
{"x": "BB", "y": 0.8},
{"x": "", "y": 0}, //<-- here
{"x": "DD", "y": 0.7},
{"x": "FF", "y": 0.6},
{"x": " ", "y": 0}, //<-- here
{"x": "HH", "y": 0.5}
]
},
Это добавляет невидимую полосу. Проблема в том, что это обычная толщина. Вы должны использовать решение 1, чтобы отрегулировать ширину.
3. Не используйте NVD3
"Ваниль" D3 имеет отличный пример о том, как разделить бары на группы .
Я не смог найти способ совместить это с NVD3.