nvd3 не дает прямого доступа к внутренностям легенды. Однако вы можете довольно легко изменить его, используя выбор d3 для управления его различными частями.
Начните с создания выделения всех элементов с классом nv-series
. Этот класс представляет одну группу в легенде, содержащую как символ круга, так и текст (в вашем случае «Group0», «Group1» и т. д.). Это возвращает массив, а первый элемент (индекс 0) представляет собой массив всех элементов:
// all `g` elements with class nv-series
d3.selectAll('.nv-series')[0]
Затем используйте функцию Array.forEach()
, чтобы перебрать этот массив, и для каждого элемента замените элемент круга соответствующим символом, соответствующим цветом заливки удаленному кругу.
Для этого вам также необходимо повторно использовать список символов, который вы сделали ранее, и перебирать их, чтобы каждой группе был назначен правильный символ. Вот один из способов сделать это, хотя, возможно, вы можете придумать более простой способ:
// reuse the order of shapes
var shapes = ['circle', 'cross', 'triangle-up', 'triangle-down', 'diamond', 'square'];
// loop through the legend groups
d3.selectAll('.nv-series')[0].forEach(function(d,i) {
// select the individual group element
var group = d3.select(d);
// create another selection for the circle within the group
var circle = group.select('circle');
// grab the color used for the circle
var color = circle.style('fill');
// remove the circle
circle.remove();
// replace the circle with a path
group.append('path')
// match the path data to the appropriate symbol
.attr('d', d3.svg.symbol().type(shapes[i]))
// make sure the fill color matches the original circle
.style('fill', color);
});
Вот обновленный JSFiddle.
===== РЕДАКТИРОВАТЬ =====
Я немного просмотрел кодовую базу nvd3, и есть гораздо более простой способ вызвать незаполнение символа легенды, когда он деактивирован. Его можно просто указать в вашем css, поскольку сериалу присваивается класс disabled
, когда он отключен.
Если вы добавите следующий css...
.nv-series.disabled path {
fill-opacity: 0;
}
... тогда вы можете удалить всю хакерскую обработку кликов JavaScript. Это намного чище, и на самом деле это то, как они справляются с этим при использовании элемента круга по умолчанию.
Вот обновленный JSFiddle.
person
jshanley
schedule
25.06.2014
nvd3.js
, чтобы сделать это. - person shabeer90   schedule 25.06.2014