#javascript #d3.js #nvd3.js
#javascript #d3.js #nvd3.js
Вопрос:
На моей приведенной здесь диаграмме NVD3 я сместил метку оси X вниз, чтобы даты были выровнены по вертикали. Для этого я сделал:
xTicks.select('.nv-axislabel').attr("y", 90); // line # 81 in JS
Теперь проблема в том, что если я скрою какую-либо из серий, используя элемент управления в правом верхнем углу, эта метка оси X восстановится в исходное положение, которое соответствует датам.
Как мне заставить ее оставаться в новой позиции без изменений?
Ответ №1:
Несколько грязное решение, но может быть достаточно хорошим:
После изменения y
атрибута метки удалите класс, который используется d3 внутренне для выбора метки и сброса ее атрибутов:
xTicks.select('.nv-axislabel')
.attr("y", 90)
.classed({'nv-axislabel':false});
Затем, как может показаться, d3 просто создает новую метку в нежелательной позиции, вы можете добавить это в файл CSS:
.nv-x .nv-axislabel {
display:none;
}
Я добавил это как правило, потому что выполнение этого программно (с помощью .style()
) занимает слишком много времени, и вы можете видеть, как она мерцает.
Ответ №2:
Если вы обновите свою библиотеку NVD3 до версии 1.1.11b
Вы можете использовать встроенную функцию поворота меток. Попробуйте это :
chart.xAxis
.tickPadding(-5).rotateLabels(-90);
Измените x
атрибут .tick major > text
на 10
, чтобы переместить позицию немного ниже.
Тогда вам НЕ понадобится следующий код :
// translate and rotate x-axis ticks
var xTicks = d3.select('.nv-x.nv-axis > g').selectAll('g');
xTicks.selectAll('g > .tick > text')
.attr('transform', function(d, i, j) {
return 'translate (-10, 40) rotate(-90 0,0)'
});
// move x-axis label down
xTicks.select('.nv-axislabel').attr("y", 90)
Надеюсь, это поможет